【发布时间】:2018-06-21 07:56:10
【问题描述】:
我正在尝试运行 SQL 查询,但运行时出错。
错误:
[代码:-811,SQL 状态:21000]
标量全查询、SELECT INTO 语句或 VALUES INTO 语句的结果多于一行..
SQLCODE=-811, SQLSTATE=21000, DRIVER=4.19.49
这是我尝试运行的 SQL 查询,我认为我的 CASE 语句有问题,我的解决方案已经用完了。请帮忙,非常感谢!
SELECT
ES.SHPMNT_REF,
(CASE
WHEN (ES.SERVICE_PROVIDER_NAME) IS NULL
THEN (SELECT BRDB.EXPORT_ONHAND.SERVICE_PROVIDER_NAME
FROM BRDB.EXPORT_ONHAND
WHERE BRDB.EXPORT_ONHAND.SHPMNT_REF = ES.SHPMNT_REF)
ELSE (ES.SERVICE_PROVIDER_NAME)
END) AS SP
FROM
BRDB.EXPORT_SHIPMENT ES
WHERE
ES.DATE_CREATE > CURRENT TIMESTAMP - 30 DAYS
【问题讨论】:
-
不要选择
CASE的inside,你应该加入BRDB.EXPORT_SHIPMENT和BRDB.EXPORT_ONHAND -
您的子查询 (
SELECT BRDB.EXPORT_ONHAND.SERVICE_PROVIDER_NAME from...) 返回不止一行,但您正尝试在查询的行级别使用它。BRDB.EXPORT_ONHAND表中是否有多个具有相同SHPMNT_REF值的记录?如果是这样,您需要重新考虑如何检索SERVICE_PROVIDER_NAME值。 -
你的
WHERE也有一些无效的语法。我假设CURRENT TIMESTAMP - 30 DAYS实际上应该是DATEADD(DAY, -30, CURRENT_TIMESTAMP)? -
@mshsayem 谢谢兄弟!效果很好!
标签: sql sql-server