2013-11-11 10 views
0

У меня есть два запросаКак объединить два запроса

1) 

select Year , Month, Sum(Stores) from ABC ; 

2) 
select Year, Month , Sum(SalesStores) from DEF ; 

Я хочу, чтобы результат, как:

**Year, Month , Sum(Stores), Sum(SalesStores)** 

Как я могу это сделать?

Я попытался & союз, получили Союз все

select Year , Month, Sum(Stores) from ABC union 
select Year, Month , Sum(SalesStores) from DEF ; 

Я вижу только 3 колонки на выходе

Year, Month Sum(Stores).

Вот таблицы:

Year, Month Stores 

Year Month SalesStores 

Есть ли способ увидеть результат в формате, который я хотел бы видеть?

+0

Как связаны оба запроса, являются '' ABC' и DEF' связаны через внешний ключ? –

ответ

0

Поскольку я не знаю их отношений, я предпочитаю использовать UNION ALL.

SELECT Year, 
     Month, 
     MAX(TotalStores) TotalStores, 
     MAX(TotalSalesStores) TotalSalesStores 
FROM 
     (
      SELECT Year, Month, 
        SUM(Stores) TotalStores, 
        NULL TotalSalesStores 
      FROM ABC 
      UNION ALL 
      SELECT Year, Month, 
        NULL TotalStores, 
        SUM(SalesStores) TotalSalesStores 
      from DEF 
     ) a 
GROUP BY Year, Month 
0

Вы можете UNION их следующим образом:

SELECT Year , Month, Sum(Stores) As Stores, NULL As SalesStores from ABC 

UNION 

SELECT Year , Month, NULL As Stores, Sum(Stores) As SalesStores from ABC 

Или использовать UNION ALL если ваша логика позволяет.

+0

hmmm ... Есть ли способ удалить все лишние нули. Я вижу нули, когда я пытаюсь использовать этот метод. – CodeNinja

+0

Да, это возможно. Когда вы вычисляете свою сумму, делаете ли вы все свои таблицы или по месяцам года? –

+0

по месяцам года – CodeNinja

0

Try:

SELECT Year, Month, SUM(TotalStores) as TotalAllStores, SUM(TotalSalesStore) as TotalAllSalesStore 
FROM 
(
SELECT Year , Month, Sum(Stores) as TotalStores, 0 as TotalSalesStore from ABC union 
UNION ALL 
SELECT Year, Month , 0 as TotalStores, Sum(SalesStores) as TotalSalesStore from DEF 
) SalesByYearMonth 
GROUP BY Year, Month 
0

Я хотел бы использовать FULL OUTER JOIN таким образом:

SELECT ISNULL(x.[Year], y.[Year]) AS [Year], 
ISNULL(x.[Month], y.[Month]) AS [Month], 
x.Sum_Stores, 
y.Sum_SalesStores 
FROM (select Year , Month, Sum(Stores) AS Sum_Stores from ABC ...) AS x 
FULL OUTER JOIN (select Year, Month , Sum(SalesStores) AS Sum_SalesStores from DEF ...) AS y 
ON x.[Year] = y.[Year] AND x.[Month] = y.[Month] 
Смежные вопросы