2017-02-22 4 views
0

このクエリを正しく構成するための適切な構文を理解することができません。私はSalesHistoryDe​​tailとSalesVsBudgetテーブルの両方からすべてのレコードを表示しようとしています。私は、SalesVsBudgetのレコードのいくつかを引っ張らないようにすることができますが、対応する販売があったかどうかに関わらず、私はそれらの期間すべてを欲しいと思っています。ここに私のコードは次のとおりです。結合ステートメントで一致するかどうかに関係なく、複数のテーブルからすべてのレコードを表示する方法

SELECT MAX(a.DispatchCenterOrderKey) AS DispatchCenter, 
     a.CustomerKey, 
CASE WHEN a.CustomerKey IN 
      (SELECT AddressKey 
       FROM FinancialData.dbo.DimAddress 
       WHERE AddressKey >= 99000 AND AddressKey <= 99599) THEN 1 ELSE 0 END AS InterCompanyFlag, 
    MAX(a.Customer) AS Customer, 
     a.SalesmanID, 
    MAX(a.Salesman) AS Salesman, 
     a.SubCategoryKey, 
    MAX(a.SubCategoryDesc) AS Subcategory, 
    SUM(a.Value) AS SalesAmt, 
     b.FiscalYear AS Year, 
     b.FiscalWeekOfYear AS Week, 
    MAX(c.BudgetLbs) AS BudgetLbs, 
    MAX(c.BudgetDollars) AS BudgetDollars 
FROM dbo.SalesHistoryDetail AS a 
LEFT OUTER JOIN dbo.M_DateDim AS b ON a.InvoiceDate = b.Date 
FULL OUTER JOIN dbo.SalesVsBudget AS c ON a.SalesmanID = c.SalesRepKey 
            AND a.CustomerKey = c.CustomerKey 
            AND a.SubCategoryKey = c.SubCategoryKey 
            AND b.FiscalYear = c.Year AND b.FiscalWeekOfYear = c.WeekNo 
GROUP BY a.SalesmanID, a.CustomerKey, a.SubCategoryKey, b.FiscalYear, b.FiscalWeekOfYear 

明らかに私から引っ張っています2つの異なるデータセット、SalesHistoryDe​​tailテーブルとSalesVsBudgetテーブルがあります。私は、すべてのbudgetLbsとBudgetDollarsの値を、SalesVsBudgetテーブルから、それらが結合で一致するかどうかにかかわらず取得することを望んでいます。一致する結合レコードもすべて必要ですが、SalesVsBudgetのすべてのレコードも必要です。基本的には、すべての売上レコードを表示したいと思います。セールスマン、顧客、サブカテゴリ、年、週が一致したときにSalesVsBudgetから予算値を参照したいのですが、私の日付範囲に該当するその期間の売上記録。うまくいけばそれは理にかなっている。私は非常に近いと感じていますが、私の予算番号は全話を反映していないので、私の記録の一部が除外されていると思います!助けてください。

答えて

0

私はFULL OUTER JOINで遊ぶことでこれを達成できました。私の問題はSalesVsBudgetにSalesHistory_Vよりも多くのレコードがあることでした。したがって、私はSalesVsBudgetを最初のFROMテーブルとSaleHistory_VをFULL OUTER JOINとすべてのレコードを並び替えるようにしなければなりませんでした。

関連する問題