如果索引列不同,则从一列中求和值?
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 列中?