2016-11-28 5 views
0

У меня есть две таблицы: Таблица ASQL Server 2008 Союз

ID Date  Answer 
1 1/1/16  

Таблица B

ID Date  Answer 
1  1/1/16  Yes 

Запрос:

SELECT * FROM A 
UNION 
SELECT * FROM B 

Выход:

Id Date  Answer 
1 1/1/16  Yes 
1 1/1/16  

Что я хотел бы видеть это

Id Date  Answer 
1 1/1/16  Yes 

Присоединяемой заготовки. По сути, я хотел бы посчитать, когда клиент (pk) один раз отвечает на вопрос на эту дату. Поэтому я хочу уникальную строку для ID и Дня.

ответ

0

Возможно, что лучший внешний союз с Coalesce будет лучшим выбором?

SELECT coalesce(t1.id, t2.id), coalesce(t1.date,t2.date), coalesce(t1.answer, t2.answer) 
FROM tableA t1 FULL OUTER JOIN tableb t2 
    ON t1.id = t2.id AND t1.date = t2.date 

Вы также можете обернуть ваш UNION в подзапросе и принять max(Answer) группировку по ID и Date. Я не уверен, что было бы более экономичным.

0

Я использовал подзапрос.

SELECT [ID] 
     ,[Date] 
     ,MAX([Answer]) as Answer 
FROM 
    (SELECT * FROM TableA 
    UNION 
    SELECT * FROM TableB) AS X 
GROUP BY [ID],[Date]