2017-07-19 3 views
0

複数のステップで何かを計算するためにCTEを使用していますが、[値]の値がゼロの行を保存する際に問題があります。ここに私のコードです: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. 

あなたは上記の私のコメントからわかるように、それはCTEから値を取るとき、それは一時テーブルから値を取るではなく、正しくrank_sums CTE機能。ここで私は2つのバージョンからの出力の種類を取得しています

一時テーブルから取っ:

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

関連する問題