Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储的Prodcedure SQL子查询返回了多个值_Sql - Fatal编程技术网

存储的Prodcedure SQL子查询返回了多个值

存储的Prodcedure SQL子查询返回了多个值,sql,Sql,错误: 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 如果CLNT\u PAYMENT\u DAYS为null或Zero,则应从COMP中选择COMP\u DUE\u DAYS 问题(如注释中所述)是子查询可以返回多行。这意味着结果将不是表格式,而是更像一个treeview层次结构,其中每一行都有多个附加行,这在SQL中不起作用 基于您问题中的有限细节,假设CLNT_COMP_ID是两个表中的一个键,则这应该可以工作: SELECT a.CLNT_PAYMENT_DAYS

错误:

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

如果CLNT\u PAYMENT\u DAYSnullZero,则应从COMP中选择COMP\u DUE\u DAYS

问题(如注释中所述)是子查询可以返回多行。这意味着结果将不是表格式,而是更像一个treeview层次结构,其中每一行都有多个附加行,这在SQL中不起作用

基于您问题中的有限细节,假设CLNT_COMP_ID是两个表中的一个键,则这应该可以工作:

SELECT a.CLNT_PAYMENT_DAYS
       , CASE
           WHEN ISNULL(a.CLNT_PAYMENT_DAYS, 0) = 0 THEN b.COMP_DUE_DAYS
       ELSE a.CLNT_PAYMENT_DAYS
       END AS xyz
FROM   vwCLNT a
       LEFT JOIN COMP b ON a.CLNT_COMP_ID = b.CLNT_COMP_ID
WHERE  a.CLNT_COMP_ID = 1;
或者这更接近原始查询,在原始查询中,从主查询中的每一行为子查询提供一个id:

SELECT    CLNT_PAYMENT_DAYS
        , CASE
              WHEN CLNT_PAYMENT_DAYS IS NULL THEN
                (
                    SELECT COMP_DUE_DAYS
                    FROM    COMP b
                    WHERE  a.CLNT_COMP_ID = b.CLNT_COMP_ID
                )
          END AS xyz
FROM vwCLNT a
WHERE CLNT_COMP_ID = 1;

如果不起作用,请提供更多详细信息,如表结构和数据示例。

top 1
添加到子查询中,以将结果限制为一行

您可能还需要添加
where
子句或
order
条件,以确保返回的单行是正确的

SELECT CLNT_PAYMENT_DAYS,
                CASE
                WHEN CLNT_PAYMENT_DAYS IS NULL THEN (SELECT TOP 1 COMP_DUE_DAYS FROM COMP)
                END as xyz
                FROM vwCLNT
                WHERE CLNT_COMP_ID=1

我已删除了冲突的数据库标记。请重新标记您正在使用的实际数据库平台。此外,样本数据和预期结果也会有所帮助。如果你认真阅读,然后写下你的问题以及创建所需的细节,你会在这里有更好的体验。有关提示,请参阅。COMP表和vwCLNT表之间的公共列是什么?看起来像SQL Server。那么,为什么您不能加入
vwCLNT
COMP
并使用
ISNULL(CLNT\u PAYMENT\u DAYS,COMP\u DUE\u DAYS)
。如果
CLNT\u PAYMENT\u DAYS
可以为0,则保留
CASE
语句,但包含
JOIN
。错误消息的哪一部分您不理解?这似乎很清楚。如果您仍然需要帮助,示例数据和期望的结果将有所帮助。
SELECT CLNT_PAYMENT_DAYS,
                CASE
                WHEN CLNT_PAYMENT_DAYS IS NULL THEN (SELECT TOP 1 COMP_DUE_DAYS FROM COMP)
                END as xyz
                FROM vwCLNT
                WHERE CLNT_COMP_ID=1