我正在尝试运行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
答案 0 :(得分:1)
我认为这就是你所追求的。加入您可能需要的表数据,然后让COALESCE检查是否为空,并获取其他数据。
SELECT
ES.SHPMNT_REF,
COALESCE(ES.SERVICE_PROVIDER_NAME, OH.SERVICE_PROVIDER_NAME) AS SP
FROM BRDB.EXPORT_SHIPMENT ES
LEFT JOIN BRDB.EXPORT_ONHAND AS OH
ON ES.SHPMNT_REF = OH.SHPMNT_REF
WHERE
ES.DATE_CREATE > CURRENT TIMESTAMP - 30 DAYS
答案 1 :(得分:0)
也许您应该放进箱子里
THEN (SELECT TOP 1 BRDB.EXPORT_ONHAND.SERVICE_PROVIDER_NAME
答案 2 :(得分:0)
由于您的子查询返回多个值而引发错误。 最好的方法是先连接两个表,然后在值为NULL时获取所需的值。 那应该起作用:
SELECT
ES.SHPMNT_REF
,CASE
WHEN ES.SERVICE_PROVIDER_NAME IS NULL
THEN EO.SERVICE_PROVIDER_NAME
ELSE ES.SERVICE_PROVIDER_NAME
END AS 'SP'
FROM BRDB.EXPORT_SHIPMENT ES
LEFT JOIN BRDB.EXPORT_ONHAND EO
ON ES.SHPMNT_REF = EO.SHPMNT_REF
WHERE ES.DATE_CREATE > CURRENT TIMESTAMP - 30 DAYS