首页 > 解决方案 > SQL 查询问题中的案例语句

问题描述

我正在尝试运行 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

标签: sqlsql-server

解决方案


我想这就是你所追求的。加入您可能需要的表数据,然后让 COALESCE 检查 null 并获取其他数据(如果是)。

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

推荐阅读