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/组/窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的窗口函数(2012 新函数)

SQL Server2008窗口计算

窗口函数

如何将相同的多窗口函数组合为一个,并在查询中的任何需要的位置调用别名?

SQL Server:具有不同长度的分析窗口函数

日期差异的 SQL Server 窗口函数