如果索引列不同,则从一列中求和值?

Posted

技术标签:

【中文标题】如果索引列不同,则从一列中求和值?【英文标题】:Sum values from one column if Index column is distinct? 【发布时间】:2013-12-27 15:19:40 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

您的意思是您只想为索引列的每个单独值求和一个 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;

或者,您的意思是,当恰好有一行具有给定的 index 值时,您只想对 quantity 的值求和:

select sum(case when count(*) over (partition by `index`) = 1
                then cast(Quantity as int)
           end) as QuantitySum
from Records;

这两个都使用窗口函数来限制正在处理的值。

此外,名为quantity 的列应存储为数字类型,因此无需转换即可获取总和。

【讨论】:

【参考方案2】:

你可以试试这样的:

SELECT DISTINCT COL1
, SUM(COL2)
FROM MYTABLE
GROUP BY COL1

【讨论】:

【参考方案3】:

如果您有重复的 ID 和数量,您可以使用它:

SELECT COALESCE(SUM(DISTINCT ISNULL(cast(Quantity as int),0)),0) AS QuantitySum 
FROM (SELECT Id, Min(Quantity) From Records group by Id)

【讨论】:

以上是关于如果索引列不同,则从一列中求和值?的主要内容,如果未能解决你的问题,请参考以下文章

Excel公式,如果一列中存在重复且另一列中存在特定文本,则对列进行求和

VBA - 如何从一列中随机选择 10% 的行,确保它们不同并将 Y 放在 B 列中?

SQL group by 和 sum 基于其他列中的不同值(如果其他列中的值重复,则求和一次)

我如何基于Awk中另一列中的值求和列中的值

将数据从一列插入另一个表的两列的过程

根据另一列的位置从一组列中返回值