SQL SELECT Sum子查询返回NULL

问题描述:

我有一列包含项目的连接列表。这些组件中的每一个都代表我从不同的表(tblComponents)获得的一个id。我试图使用各个项目(使用凡在我子查询中)找到每个项目的每个组件的数量:SQL SELECT Sum子查询返回NULL

SELECT s.title 'Product SKU' 
,s.price 'Item Price' 
,CASE WHEN (select SUM(c.qty) from tblComponents where CID IN (s.Items)) = 0 
    THEN 1 
    ELSE c.qty 
END 'Items Qty' 
FROM tblsku s JOIN tblcomponent c ON c.idtblcomponent = s.idtblcomponent 
JOIN tblgrade g ON g.idtblgrade = c.idtblgrade 
WHERE --etc... 

我试图在WHERE中的值分开使用:

'''' + REPLACE(s.Items, ',', ''', ''') + '''' 

它仍然返回空值。

SUM()返回一个空值。

样品:

tblSku - 物品字段包含值1,2(在相同的字段)

tblComponent CID 1包含的2数量,CID 2含有的3

数量在这种情况下我想显示5的总和场“项目数量”

+0

'tblSku分成数行 - 物品字段包含值1,2(在相同的字段)'这是否意味着有1项纪录并且该记录在“Items”字段中具有值“1,2”?如果是这样,那么你的问题是:'IN'不能将逗号分隔的字符串识别为值列表;它只是一个单一的字符串值。 –

+0

对。我试图改变它,所以1,2将读为'1','2',但我仍然得到NULL。 – BrettKB

+0

@BrettKB替换不起作用。检查我的答案,看看你如何将字符串拆分成行 –

仅仅因为你有一个字符串'1,2'

并不意味着那些事情是平等的。

CID IN ('1,2') <> CID IN (1,2) 

你必须字符串像这样的东西

Turning a Comma Separated string into individual rows