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