当索引列不同时,如何对一列中的值求和?
最初,我有这个SQL查询:
SELECT COALESCE(SUM(ISNULL(cast(Quantity as int),0)),0) AS QuantitySum FROM Records
也尝试这样做,但是当一些Quantity值恰好相同时,这是不正确的:
SELECT COALESCE(SUM(DISTINCT ISNULL(cast(Quantity as int),0)),0) AS QuantitySum FROM Records
如何修复此查询以仅记录与索引值不同的记录数量?
表格示例:
Index Quantity
AN121 40
AN121 40
BN222 120
BN111 20
BN2333 40
所以..我想要返回220
我有重复的ID,但不同记录的数量可以相同
答案 0 :(得分:2)
你的意思是你只想为索引列的每个单独的值quantity
加一个值?
select sum(case when row_number() over (partition by `index` order by newid()) = 1
then cast(Quantity as int)
end) as QuantitySum
from Records;
或者,您的意思是,当只有一行具有给定的quantity
值时,您只想将index
的值相加:
select sum(case when count(*) over (partition by `index`) = 1
then cast(Quantity as int)
end) as QuantitySum
from Records;
这两个都使用窗口函数来限制正在处理的值。
此外,名为quantity
的列应存储为数字类型,因此无需转换即可获取总和。
答案 1 :(得分:0)
您可以尝试以下内容:
SELECT DISTINCT COL1
, SUM(COL2)
FROM MYTABLE
GROUP BY COL1
答案 2 :(得分:0)
如果您有重复的ID和数量:
,您可以使用此功能SELECT COALESCE(SUM(DISTINCT ISNULL(cast(Quantity as int),0)),0) AS QuantitySum
FROM (SELECT Id, Min(Quantity) From Records group by Id)