SQL Server SUM/组/窗口函数
Posted
技术标签:
【中文标题】SQL Server SUM/组/窗口函数【英文标题】:SQL Server SUM/Group/Window Function 【发布时间】:2015-09-30 19:06:14 【问题描述】:美好的一天, 我有一张如下表。
我想做的是添加一个新列,它将按 CovID/PolicyNo/CovYear/Positive(Negative) 值制表/汇总(无论如何)称为“新网络”。
在下面的示例中,新列将如下所示。 简而言之,我们要做的是汇总该组中的所有值,并将该总数放在该组的第一行,并将所有其他值归零。任何帮助/指针将不胜感激。我已经尝试过 SQL Server 窗口函数,标准 SUM/GROUP。
【问题讨论】:
这有助于向我们展示您的尝试。但是,查找 GROUP BY 分组集和/或 ROLLUP/CUBE 函数。他们做类似的事情。 所有额外的行是不是有点多余?您可以通过SELECT DISTINCT
查询获得所有相关信息。
如果您在 2012 年以上,您应该查看 LEAD/LAG 函数。
Joe - 我无法控制当前存在的表。我无法删除/更新“网络”列。 Jeremy - 感谢您将我指向汇总命令。没听说过。
顺便说一下,这是我尝试过的东西——,ROW_NUMBER() OVER(PARTITION BY Coverage_CoverageID-Certificate_CertificateID-CoverageInYear ORDER BY CoverageInYear) AS NewNet
【参考方案1】:
这应该符合您的期望:
SELECT PolicyNo ,
CovID ,
CovYear ,
p ,
net,
CASE WHEN ROW_NUMBER()OVER(PARTITION BY CovID, PolicyNo, CovYear, net ORDER BY PolicyNo) = 1 THEN net ELSE 0 END AS NewNet
FROM dbo.test1;
【讨论】:
以上是关于SQL Server SUM/组/窗口函数的主要内容,如果未能解决你的问题,请参考以下文章