2016-11-28 4 views
0

Ich habe zwei Tabellen: Tabelle ASQL Server 2008 Union

ID Date  Answer 
1 1/1/16  

Tabelle B

ID Date  Answer 
1  1/1/16  Yes 

Abfrage:

SELECT * FROM A 
UNION 
SELECT * FROM B 

Ausgang:

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

Was Ich mag würde, um zu sehen ist

Id Date  Answer 
1 1/1/16  Yes 

Merging-Rohlingen. Grundsätzlich möchte ich zählen, wenn ein Kunde (PK) einmal eine Frage an diesem Datum beantwortet. Ich möchte also eine eindeutige Zeile pro ID und Tag.

Antwort

0

Vielleicht wäre eine vollständige äußere Verbindung mit einem Coalesce eine bessere Wahl?

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 

Sie können auch Ihre UNION in einer Unterabfrage und nehmen die max(Answer) Gruppierung auf ID und Date einpacken. Ich bin mir nicht sicher, was jedoch wirtschaftlicher wäre.

0

Ich habe Unterabfrage verwendet.

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