2016-05-13 34 views
1

我的表是這樣的:如何更換在分組列中的所有值,除了第一行

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 

我需要按年份和月份進行總結通過RegionCreatedDate分組列Value。其結果將是

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

+0

爲什麼你不能在應用程序層 –

+0

這太難了。我必須使用Oracle BI Publisher導出到excel - 並且我不知道如何執行此操作 –

回答

2

你需要使用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 

ONLINE DEMO

雖然這可以在TSQL做,我建議你在應用程序端的格式。


下面的順序相同OP Query

+0

非常好,我親愛的朋友! - 你爲我節省了大量的工作時間) –

+0

但是在SO輸出中它顯示了古巴的最後一次,但是在你的結果集顯示在中間 – mohan111

+0

@ mohan111,這可能意味着排序並不重要,只要數據相同國家被分組在一起。 –

相關問題