2017-05-18 13 views
1

SQL Serverの専門家に質問します。以下のクエリでは、SUMを数量に追加する列を追加したいと思いますが、別の要件タイプに基づいています。私はいくつかのアイデアを試した - ケースと選択リストにサブクエリを追加するが、すべての結果が非常に多くの戻ります。私が見たいのは、REPEUIREMENT TYPE = 'PB'のときはMATERIAL、MATERIAL_DESCRIPTION、SIZE_LITERAL、SUMの合計です。REQUIREMENT TYPE = '01'のときはSUMの数量2つの異なる条件に量を2回追加する方法がわかりません。事前のおかげでクエリで同じ列が複数回表示される

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(QUANTITY) AS 'SUM_FCST' 

FROM VW_MRP_ALLOCATION 

WHERE REQUIREMENT_CATEGORY = 'A60381002' 

AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 

AND REQUIREMENT_TYPE ='PB' 


GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 

ORDER BY MATERIAL, 
     SIZE_LITERAL 
+1

条件付き合計case文を使用して。そのうちの2つ...どこの句から制限を取り除きますか – xQbert

答えて

6

あなたはSUM()の内側CASE表現を使用します。これは条件付きの集合体である:

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(case when REQUIREMENT_TYPE ='PB' then QUANTITY else 0 end) AS 'SUM_FCST_PB', 
     SUM(case when REQUIREMENT_TYPE ='01' then QUANTITY else 0 end) AS 'SUM_FCST_01'  
FROM VW_MRP_ALLOCATION 
WHERE REQUIREMENT_CATEGORY = 'A60381002' 
    AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 
GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 
ORDER BY MATERIAL, 
     SIZE_LITERAL 
+2

どこの句を削除するのが良いキャッチ! – xQbert

+0

brilliant - ありがとうございました - あなたがELSE 0 ENDを持っていなかった場合 - ENDだけでなく、まだ動作しますか?なぜそうでないのであれば?私は助けを感謝します – user3496218

+0

@ user3496218 'else 0'は、何も一致しない行にゼロ値を挿入します。そうでない場合はnullになります。それはどのように表示されるかによって異なります - [こちらはデモです](http://data.stackexchange.com/stackoverflow/query/673031)。 – ollie

1

あなたは以下のように合計内側ケースを使用することができます。

SELECT MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL, 
     SUM(CASE WHEN [Requirement_Type] = 'PB' then QUANTITY else 0 end) AS 'SUM_FCST' 

FROM VW_MRP_ALLOCATION 

WHERE REQUIREMENT_CATEGORY = 'A60381002' 

AND MATERIAL_AVAILABILITY_DATE >= GETDATE() 

AND REQUIREMENT_TYPE ='PB' 


GROUP BY MATERIAL, 
     MATERIAL_DESCRIPTION, 
     SIZE_LITERAL 

ORDER BY MATERIAL, 
     SIZE_LITERAL 
関連する問題