2017-07-19 33 views
0

我正在使用CTE在多個步驟中計算某些內容,並且我在保留[Value]值爲零的行時遇到了問題。這裏是我的代碼:SQL - 在鏈接CTE時零被刪除

sum_values        
AS (
    SELECT SUM([Value]) AS [Value] 
     , [Situation] 
     , [Category 3] 
     , [Category 2] 
    FROM #temp 
    GROUP BY [Situation] 
      , [Category 3] 
      , [Category 2] 
), 
rank_sums    
AS (
    SELECT ROW_NUMBER() OVER(PARTITION BY [Category 3] 
             , [Category 2] ORDER BY [Value]) AS [row] 
     , [Category 3] 
     , [Category 2] 
     , [Value] 
    --FROM #temp),    -- Taking from the temp table preserves the zero-rows. 
    FROM sum_values),   -- Taking from the previous CTE does not. 

你可以從我的意見見上面的rank_sums CTE功能正常時,它需要從價值觀臨時表,但不是當它從一個CTE值。這裏有各種輸出我從兩個版本獲得:

當從臨時表服用:

row Category 3 Category 2 Value 
1  C    A    -6 
2  D    A    -4 
3  E    B    0 
4  F    B    1 
5  G    B    3 

從CTE在拍攝:

row Category 3 Category 2 Value 
1  C    A    -6 
2  D    A    -4 
3  F    B    1 
4  G    B    3 
5  H    B    4 

沒有人有經驗解決這個錯誤?

回答

0

您的sum_values CTE正在計算總和;在你已經顯示的情況下,對於類別3 =「B」和類別2 =「E」,零值總計爲1,因此被消除。當你從#temp中選擇時,沒有求和,所以零出現。

+0

感謝您的回覆。我最初輸入的結果表是不正確的,所以錯誤可能是別的。當我執行'sum_values'的'SELECT'部分時,我得到Value = 0的行。 – cxm