2017-07-31 17 views
0

ここでは、次のようにデータを取得しようとしています。(EXPECTED)SQL ServerストアドプロシージャのSUM()

ID | Project | SC | PO | INV 
---+---------+------+----+----- 
1 | test1 | NULL | 1 | NULL 
2 | test2 | NULL | 1 | NULL 

として

ID | Project | SC | PO | INV 
---+---------+------+------+----- 
1 | test1 | NULL | 1 | NULL 
2 | test2 | NULL | NULL | NULL 

が、私のストアドプロシージャあたりのように私は、出力を取得しています多分、私の内側のクエリからの結果は、POがあまりにもPO test2としてProject test1のために受け取った表示しています。それは起こらないはずです。プロジェクト 'test1'はBudgetDetailsテーブルとDetailsテーブルの両方に存在するためです。

私が書いたsum()クエリを修正する助けがありますか?

SELECT 
    BD.ID, BD.Project, 
    (SELECT SUM(Amount) AS SC 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails (NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'SC' AND a.Project = b.Project) AS SC, 
    (SELECT SUM(Amount) as PO 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails(NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'PO' AND a.Project = b.Project) AS PO, 
    (SELECT SUM(Amount) as INV 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails(NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'INV' AND a.Project = b.Project) AS INV 
FROM 
    BudgetDetails (NOLOCK) BD 
WHERE 
    BD.Quarter = @Quarter AND BD.Year = @Year 
GROUP BY 
    BD.ID, BD.Project 
+0

データを提供することはできますか? – Xedni

+0

@Xedni入力データは四半期と年(1,2016)です – beginner

+0

「BudgetDetails」テーブルと「Details」テーブルのデータがどのように見えるかを意味します。あなたのクエリには幾分奇妙なものがありますが、あなたのデータとソーステーブルがどのようなものか分からずに推測するだけです。 – Xedni

答えて

0

クエリを修正するには、

は、あなたが優れている、あなたのサブクエリでAND a.Project = BD.Projectを必要としますCASEステートメントまたはPIVOTを使用して、それを再書き込み

SELECT 
    BD.ID, BD.Project, 
    SUM(CASE WHEN ProcurementStatus = 'SC' THEN Amount END) as SC, 
    SUM(CASE WHEN ProcurementStatus = 'PO' THEN Amount END) as PO, 
    SUM(CASE WHEN ProcurementStatus = 'INV' THEN Amount END) as INV, 

FROM 
     BudgetDetails (NOLOCK) BD 
LEFT JOIN 
     Details (NOLOCK) D ON BD.Project = D.Project 
WHERE 
     BD.Quarter = @Quarter 
AND BD.Year = @Year 
GROUP BY 
     BD.ID, 
     BD.Project 

EDIT 1:からの変更あなたは@初心者の要求を反映するために入場してください。

+0

メインクエリでDetailsテーブルを使用できません。これにより、BudgetDetailsテーブルのNULL SC、PO、INV値が表示されなくなります。 – beginner

+2

@beginner:Left joinを使用した後、BudgetDetailsテーブル – TriV

+0

のすべての行を表示するには、 – beginner

関連する問題