如果Index列不同,则从一列汇总值?

时间:2013-12-27 15:19:41

标签: sql sql-server

当索引列不同时,如何对一列中的值求和?

最初,我有这个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,但不同记录的数量可以相同

3 个答案:

答案 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)