2017-06-06 4 views
-1

2つのテーブルが必要です。テーブルA SQLのテーブルBの行を削除するJOIN

SELECT 
    b.TrnYear, b.TrnMonth, b.Branch, b.Salesperson, b.OrderValue 
FROM 
    dbo.vw_jab_Consolidated_Orders as b 
INNER JOIN 
    dbo.vw_jab_SalTargets as a ON a.Sequence2 = b.Salesperson 
WHERE 
    b.TrnYear = '2017' 
ORDER BY 
    a.TrnMonth 

SELECT 
    a.TrnYear, a.TrnMonth, a.Sequence1, a.Sequence2, a.SalesTarget 
FROM 
    dbo.vw_jab_SalTargets as a 
WHERE 
    a.TrnYear = '2017' AND a.SequenceType = 'BR' 
GROUP BY 
    a.TrnYear, a.TrnMonth, a.Sequence1, a.Sequence2, a.SalesTarget 

私の問題は何もOrderValuesがないヶ月があるので、私は2つのテーブルを結合するとき、次のように、SalesTarget値は除外されていることである:私はOrderValueSalesTargetを除いて同じ列を持つ2つのSELECT文を持っています:

SELECT   
    a.TrnYear, SUM(a.SalesTarget) as SalesTarget, SUM(b.InvoicedSales) AS InvoicedSales 
FROM 
    (SELECT   
     TrnYear, SUM(SalesTarget) AS SalesTarget 
    FROM    
     dbo.vw_jab_SalTargets 
    WHERE   
     (SequenceType = 'BR') 
    GROUP BY 
     SequenceType, TrnYear) AS A 
LEFT JOIN 
    (SELECT   
     TrnYear, SUM(ActualSales) AS InvoicedSales 
    FROM    
     dbo.vw_jab_Consolidated_Sales 
    GROUP BY 
     TrnYear) AS b ON a.TrnYear = b.TrnYear 
WHERE 
    a.TrnYear = '2017' 
GROUP BY 
    a.TrnYear 
+0

ここで質問をするときにシャウトする必要はありません:-) –

+0

「内部結合」の代わりに「左結合」を試みましたか? – user2023861

+0

こんにちは、私は左の結合を試みました。 – Jeannette

答えて

0

内部結合ではなく、適切な外部結合が必要です。右外部結合の場合、左テーブルに一致する値がなくても、右テーブルのすべての列が保持されます。

はこれを試してみてください:

SELECT  a.TrnYear, a.TrnMonth, SUM(a.SalesTarget) as SalesTarget, SUM(b.InvoicedSales) AS InvoicedSales 
    FROM   (SELECT  TrnYear, TrnMonth, SUM(SalesTarget) AS SalesTarget 
           FROM   dbo.vw_jab_SalTargets 
           WHERE  (SequenceType = 'BR') 
           GROUP BY SequenceType, TrnYear, TrnMonth) AS a RIGHT OUTER JOIN 
           (SELECT  TrnYear, TrnMonth, SUM(ActualSales) AS InvoicedSales 
            FROM   dbo.vw_jab_Consolidated_Sales 
            GROUP BY TrnYear, TrnMonth) AS b ON a.TrnYear = b.TrnYear and a.TrnMonth=b.TrnMonth 
            WHERE a.TrnYear = '2017' 
    GROUP BY a.TrnYear, a.TrnMonth 
    ORDER BY TrnMonth 
+0

これは良い結果をもたらしますが、値は正しくありません – Jeannette

+0

私は問題は、両方のテーブルに各テーブルに存在しない値があることだと考えています – Jeannette

+0

入手 - FULL OUTER JOIN - ゴールデンレシオとuser2023861 – Jeannette

0

あなたが登録しようRIGHTに切り替えることができますが、あなたは何のInvoicedSalesを持っていない場合、その後、あなたはどんなSalesTargetsを取得することはできません。カラムは常にTrnYearを返すように)

SELECT COALESCE(a.TrnYear,b.TrnYear) AS TrnYear 
    ,SUM(a.SalesTarget) AS SalesTarget 
    ,SUM(b.InvoicedSales) AS InvoicedSales 
FROM (
    SELECT TrnYear 
     ,SUM(SalesTarget) AS SalesTarget 
    FROM dbo.vw_jab_SalTargets 
    WHERE (SequenceType = 'BR') 
    GROUP BY SequenceType 
     ,TrnYear 
    ) AS a 
FULL OUTER JOIN (
    SELECT TrnYear 
     ,SUM(ActualSales) AS InvoicedSales 
    FROM dbo.vw_jab_Consolidated_Sales 
    GROUP BY TrnYear 
    ) AS b 
    ON a.TrnYear = b.TrnYear 
WHERE a.TrnYear = '2017' 
    OR b.TrnYear = '2017' 
GROUP BY COALESCE(a.TrnYear,b.TrnYear) 

COALESCEを(必要がある:私はそうのような完全外部結合を使用すると思います。

+0

に感謝してくれてありがとう助けてくれてありがとう、私は良い結果を得ました。 – Jeannette

関連する問題