2015-02-24 3 views
0

У меня есть две таблицы, настроенные таким же образом, но с разными значениями. Вот образцы из каждой:Суммирование столбцов в двух таблицах, затем объединение таблиц

Table1:

Date  Code  Count 
1/1/2015 AA   4 
1/3/2015 AA   2 
1/1/2015 AB   3 

Table2:

Date  Code  Count 
1/1/2015 AA   1 
1/2/2015 AA   0 
1/4/2015 AB   2 

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

Output_Table:

Date  Code  Count 
1/1/2015 AA   5 /*Summed because found in Table1 and Table2*/ 
1/2/2015 AA   0 
1/3/2015 AA   2 
1/1/2015 AB   3 
1/4/2015 AB   2 

У меня нет первичного ключа для подключения двух таблиц, и присоединяется я попытался либо не сохранял все отдельные пары даты-коду или создал дубликаты.

Для справки, я делаю это внутри инструкции SAS proc sql.

ответ

1

Я нахожусь на дороге в тот момент, так что я не запускать, но:

SELECT date , 
     code , 
     SUM([count]) 
FROM (SELECT * 
      FROM  table1 
      UNION ALL 
      SELECT * 
      FROM  table2 
     ) [tables] 
GROUP BY date , 
     code 
ORDER BY date , 
     code 

будет делать трюк. Я буду иметь трещины на присоединиться к версии и редактировать этот пост, когда я перед надлежащего компьютера

EDIT:

Полное внешнее объединение и COALESCE также будет делать это, хотя это немного медленнее, так что может зависеть от того, что еще вы там делаете!

SELECT COALESCE(#table1.date, #table2.date) , 
    COALESCE(#table1.code, #table2.code) , 
    ISNULL(#table1.COUNT, 0) + ISNULL(#table2.COUNT, 0) 
FROM #table1 
    FULL OUTER JOIN #table2 ON #table2.code = #table1.code 
           AND #table2.date = #table1.date 
ORDER BY COALESCE(#table1.date, #table2.date) , 
    COALESCE(#table1.code, #table2.code) 
+0

Первый ответ красивый. Сложите данные с помощью объединения и разбейте его агрегацией. Второй - отличный, но если ваш стол имеет какой-то размер, ваше пространство катушки будет очень очень несчастным. – JNevill

+0

Спасибо! Это решает. Я не думал об использовании союза. Я возился с логикой JOIN. Главный ответ работал отлично для меня. – Max