2015-09-29 2 views
0

У меня возникли проблемы с группировкой некоторой информации из двух таблиц для сравнения информации.наличие проблем с группировкой информации SQL

У меня есть две таблицы

Baseline 
|ResourceGroup Unit  TotalUnits| 
|Mechanic   50   600| 
|Electric   50   600| 
|Mechanic   52   600| 
|Electric   52   600|  

Actual 
|ResourceGroup Unit  TotalUnits| 
|Mechanic   50   500| 
|Electric   50   500| 
|Mechanic   52   500| 
|Electric   52   500|  

То, что я хотел бы видеть, является следующее:

|ResourceGroup Baseline.TotalUnits Actual.TotalUnits| 
|Mechanic     1200     1000| 
|Electric     1200     1000| 

Я пытаюсь использовать следующий запрос, но это не похоже на работу. Я думаю, что чего-то не хватает. Может ли кто-нибудь увидеть, где я ошибаюсь?

SELECT Baseline.ResourceGroup, Baseline.TotalUnits, Actual.TotalUnits 
INNER JOIN Baseline.ResourceGroup = Actual.ResourceGroup 
GROUP BY ResourceGroup; 
+0

Просто на первый взгляд, Вы пропускаете 'пункт от' – Barranka

+0

Это не очень хорошо сформированный запрос. Попробуйте форматировать его таким образом 'Выберите columnName1, columnName2, .. FROM Table1 INNER JOIN Table2 ON Table1.columnNameN1 = Table2.columnNameN2' – NaNey

ответ

2

Поперечное соединение этих двух таблиц даст вам 2х2 = 4 строк на ResourceGroup означает, что вы будете иметь 4 ряда Mechanic и 4 ряда электрических данных. И группировка после того, как вы уже присоединились к ним, даст вам несоответствующие значения.

Решение состоит в том, чтобы сгруппировать эти таблицы отдельно и после соединения приведенных таблиц. Это даст вам следующие две таблицы, которые вам необходимо зарегистрироваться на ResourceGroup колонке:

Baseline 
|ResourceGroup TotalUnits| 
|Mechanic   1200| 
|Electric   1200| 

Actual 
|ResourceGroup  TotalUnits| 
|Mechanic   1000| 
|Electric   1000| 

Рисунок из следующих инструкций SQL:

SELECT 
    A.ResourceGroup, 
    A.TotalUnits as BaselineTotalUnits, 
    B.TotalUnits as ActualTotalUnits 
FROM (SELECT ResourceGroup, SUM(TotalUnits) as TotalUnits FROM Baseline GROUP BY ResourceGroup) A 
JOIN (SELECT ResourceGroup, SUM(TotalUnits) as TotalUnits FROM Actual GROUP BY ResourceGroup) B 
    ON A.ResourceGroup = B.ResourceGroup 
+0

Хотя ваш ответ дает правильный результат, вам действительно не нужны подзапросы, чтобы получить то, что требуется OP; достаточно присоединиться к обеим таблицам и выполнить агрегацию по каждому столбцу – Barranka

+0

Можете ли вы привести пример заявления? Я действительно не понимаю, как вы можете добиться этого, не делая сначала группировки ... Спасибо! :) – GSazheniuk

+0

Вы правы! Прочитав снова образец данных в OP, я понимаю, что вы имеете в виду. Прошу прощения за неудобства (удалив мой предыдущий ответ сейчас) – Barranka

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