2017-02-22 18 views
0

Мне сложно понять правильный синтаксис, чтобы правильно структурировать этот запрос. Я пытаюсь показать ВСЕ записи из SalesHistoryDetail И из таблицы 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 

Есть два различных набора данных, которые я тянущие из, очевидно таблицы SalesHistoryDetail и таблицы SalesVsBudget. Я надеюсь получить все значения budgetLbs и BudgetDollars из таблицы SalesVsBudget, независимо от того, совпадают ли они в соединении. Мне тоже нужны все совпадающие записи, но я также хочу КАЖДУЮ запись от SalesVsBudget. По сути, я хочу показать ВСЕ записи продаж, и я хочу ссылаться на бюджетные значения из SalesVsBudget, когда продавец, покупатель, подкатегория, год и неделя, но я также хочу видеть записи бюджета, которые попадают в мой диапазон дат, которые не имеют соответствующих продаж за этот период. Надеюсь, это имеет смысл. Я чувствую, что я очень близок, но мои бюджетные номера не отражают всю историю, и я думаю, это потому, что некоторые мои записи исключены! Пожалуйста помоги.

ответ

0

Я смог выполнить это, играя с ПОЛНОЙ ВНЕШНИМ СОЕДИНЕНИЕМ. Мои проблемы заключались в том, что в SalesVsBudget было больше записей, чем SalesHistory_V. Поэтому мне пришлось сделать SalesVsBudget исходной таблицей FROM и SaleHistory_V с FULL OUTER JOIN, и все записи выстроились в очередь.

Смежные вопросы