【问题标题】:SQL Server SUM/Group/Window FunctionSQL Server SUM/组/窗口函数
【发布时间】: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

标签: sql-server group-by sum window-functions


【解决方案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;

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2018-01-03
    • 1970-01-01
    • 2020-08-05
    • 2013-05-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多