2017-10-17 11 views
2

私が作業しているレポートがあります。レポートにはいくつかのパラメータが渡されています。それらの1つはコンマで操作される一連のUserIdです。これらは分割され、テーブル変数に送られます。クエリの側では、値を合計できる必要があります。これらの合計のうちのいくつかでは、この値を合計に加算する必要があり、別の場合には加算しません。コードは次のようになります...テーブル変数の値のチェックを含むケースステートメントの合計

SELECT 
     TrnId, 
     TrnCode, 
     (SUM(CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end)) as Value 
     AnotherColumn 
    FROM SomeTableJoinedOnOtherThings 

私が午前問題はこれです...「集約またはサブクエリを含む式に集約関数を実行できません。」これは、私が想定しているのは、INテーブルのチェックです。

私はクエリを渡すパラメータのチェックだけをしていることを除いて、これとちょうど別のレポートがあります。

(CASE PolicyUseId when @UseId then PriceColumn else 0 end) 

このクエリは正しく機能し、すべての計算が正しく実行されます。私は2つのデータセットを選択して残念なことにそれらを追加する方法を決定する必要があるので、選択行にこのケースステートメントなしで合計を正しく取得する方法を正確には分かりません。どんな助言も素晴らしいでしょう。

+0

もし 'SUM'を削除したら、それは動作しましたか?... CTEをやっていたらどうですか? – Hackerman

答えて

3

おそらく、あなたは、すべての集約を必要としない:

SELECT TrnId, TrnCode, 
     (CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end) as Value 
     AnotherColumn 
FROM SomeTableJoinedOnOtherThings; 

あなたが集約を行う必要がある場合は、あなたがGROUP BYを必要としています。そしてLEFT JOINは動作します - あなたは@Tableには重複がないと仮定すると:

SELECT TrnId, TrnCode, 
     SUM(CASE WHEN tt.UseId IS NOT NULL THEN TotalPremium ELSE 0 END) as Value, 
     AnotherColumn 
FROM SomeTableJoinedOnOtherThings t LEFT JOIN 
    @Table tt 
    ON t.PolicyUseId = tt.UseId 
GROUP BY TrnId, TrnCode, AnotherColumn; 
+0

ありがとう。これにより、クエリは長期的にもより消化しやすくなりました。 –

2

あなたがサブクエリに対してaggregrateすることはできません。

おそらくLEFT OUTER JOIN @テーブルは、そのフィールドのPolicyUseIdフィールドのテーブルにありますか?次に、CASEでUseIdがNULLかどうかを確認します。

関連する問題