繁体   English   中英

如何替换除第一行以外的分组列中的所有值

[英]How to replace all values in grouped column except first row

我有这样的表:

ID   Region  CreatedDate   Value
--------------------------------
1    USA     2016-01-01    5
2    USA     2016-02-02    10
3    Canada  2016-02-02    2
4    USA     2016-02-03    7
5    Canada  2016-03-03    3
6    Canada  2016-03-04    10
7    USA     2016-03-04    1
8    Cuba    2016-01-01    4

我需要总结的列Value按分组RegionCreatedDate按年份和月份。 结果将是

Region  Year   Month  SumOfValue
--------------------------------
USA     2016   1       5
USA     2016   2      17
USA     2016   3       1
Canada  2016   2       2
Canada  2016   3      13
Cuba    2016   1       4

但是我想用空字符串替换Region列中的所有重复值,但第一个遇到的行除外。 最终结果必须为:

Region  Year   Month  SumOfValue
--------------------------------
USA     2016   1          5
        2016   2         17
        2016   3          1
Canada  2016   2          2
        2016   3         13
Cuba    2016   1          4

谢谢您的解决方案。 如果解决方案也将在Year栏中替换将是有利的

您需要使用SUMGROUP BY来获取SumOfValue 对于格式,您可以使用ROW_NUMBER

WITH Cte AS(
    SELECT
        Region,
        [Year]  = YEAR(CreatedDate),
        [Month] = MONTH(CreatedDate),
        SumOfValue = SUM(Value),
        Rn = ROW_NUMBER() OVER(PARTITION BY Region ORDER BY YEAR(CreatedDate), MONTH(CreatedDate))
    FROM #tbl
    GROUP BY
        Region, YEAR(CreatedDate), MONTH(CreatedDate)
)
SELECT
    Region = CASE WHEN Rn = 1 THEN c.Region ELSE '' END,
    [Year],
    [Month],
    SumOfValue
FROM Cte c
ORDER BY
    c.Region, Rn

在线演示

尽管这可以在TSQL中完成,但我建议您在应用程序端进行格式化。


查询遵循与OP相同的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM