You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询报错:子查询返回多行值,请求排查具体子查询

问题排查与修复

首先,报错明确是子查询作为表达式时返回了多行,我们逐个分析你的两个子查询:

1. 第一个子查询(求和)

(select sum( T2.OnHand) AS 'QTY' 
 from OITW T2 
 join OITM T3 on T2.ItemCode = T3.ItemCode  
 where T3.[ItemCode] = T1.[ItemCode]   
   and WhsCode in ('KHI-04', 'KHI-12', 'RWP-01', 'LHR-01'))

这个子查询使用了sum()聚合函数,无论匹配多少行,都会返回单个值(无匹配时返回null),所以它不会导致这个报错。

2. 第二个子查询(取Quantity)

(select Quantity 
 from drf1  drf 
 inner join OITM itm on drf.[ItemCode] = itm.[ItemCode]
 where drf.[ItemCode] = T1.[ItemCode])

这个子查询没有任何聚合或限制行数的逻辑,当某个ItemCode在drf1表中存在多条记录时,它会返回多行结果,直接用在减法表达式里就触发了报错。

排查验证

你可以单独运行这个子查询,替换T1.[ItemCode]为一个实际存在的商品编码,比如:

select Quantity 
from drf1 drf 
inner join OITM itm on drf.[ItemCode] = itm.[ItemCode]
where drf.[ItemCode] = '你的商品编码示例'

如果返回多行,就确认了问题根源。

修复方案

根据你的业务需求选择以下方式之一:

  • 如果需要统计该商品的总Quantity,使用sum()聚合:
    (select sum(Quantity)
     from drf1 drf 
     inner join OITM itm on drf.[ItemCode] = itm.[ItemCode]
     where drf.[ItemCode] = T1.[ItemCode])
    
  • 如果只需要某一行的Quantity,添加TOP 1并指定排序逻辑(比如最新的记录):
    (select TOP 1 Quantity
     from drf1 drf 
     inner join OITM itm on drf.[ItemCode] = itm.[ItemCode]
     where drf.[ItemCode] = T1.[ItemCode]
     order by drf.某个日期字段 desc)
    
  • 或者使用max()/min()取极值,根据业务场景选择。

额外注意事项

原SQL还有两处拼写错误需要修正:

  • WhsCode in ('KHI-04', 'KHI12', 'LHR-01', 'RWP-O1') 中的KHI12应该改为KHI-12,RWP-O1应该改为RWP-01,否则会漏掉部分仓库的数据。
  • 第二个子查询末尾缺少闭合的),需要补上。

内容的提问来源于stack exchange,提问作者Hafiz Daniyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:50:22