2017-12-13 1 views
0

Ich habe versucht, die Suche aber es fehlt wahrscheinlich die Sprache eine ähnliche Position zu finden, also hier ist mein Grundproblem
(SQL Server 2016) ...One zu viele beitreten zu schaffen Duplikate trotz CASE-Anweisung

Ich habe eine Abfrage, die einzigartig identifiziert Kundenbegegnungen (1 line per 1 transaction). Ich versuche dann, die Artikel einzuziehen, die der Kunde von einem anderen Tisch gekauft hat. Wenn sie mehrere Artikel gekauft haben, listet die Verknüpfungstabelle diese Transaktion mehrmals mit einem Feld namens "Zeile" auf, um eine Rangfolge dieser Artikel anzugeben.

Tabelle 2:

Transaction--Line--Item 

1000--1--Staples 

1000--2--Stapler 

1001--1--Paper 

Ich mag das Endergebnis in meiner Anfrage sein: Tabelle 1:

Customer--Transaction--Item1--Item2 

John Doe--1000--Staples--Stapler 

Jane Smith--1001--Paper--NULL 

Ich bin derzeit versucht, dies zu tun mit einer CASE Aussage in meinem SELECT :

SELECT Table1.Customer, 

Table1.Transaction, 

CASE WHEN Table2.LINE = 1 THEN Table2.Item 
       ELSE NULL 
       END as Item1 

CASE WHEN Table2.LINE = 2 THEN Table2.Item 
       ELSE NULL 
       END as Item2 

FROM Table1 left outer join Table2 on Table1.transaction=Table2.transaction 

Dies ergibt das richtige Ergebnis s, mit der Ausnahme, dass die eine zu vielen beitreten wird diese auf doppelte Zeilen

John Doe--1000--Staples--NULL 

John Doe--1000--NULL--Stapler 

Jane Smith--10001--Paper--NULL 

platzieren mag ich John Doe alle auf einer Zeile. Anders als zwei separate Update-Anweisungen nach der ersten Abfrage auszuführen, weiß ich nicht, wie ich das gewünschte Ergebnis erzielen kann. Hilfe?

(Entschuldigung für die miese Formatierung)

Antwort

0

sollte Unten arbeiten. vorausgesetzt, es wird mindestens am Eingang in Tabelle2 sein

SELECT Table1.Customer, 
Table1.Transaction, 
t1.Item AS Item1, 
t2.Item as Item2 
FROM Table1 
INNER JOIN Table2 t1 
    on c.transactions=t1.tid 
left outer join Table2 t2 
    on Table1.transaction=t2.transaction AND t2.Line=2 
where t1.line=1 
+0

Danke für den Vorschlag. Das scheint nicht zu funktionieren, da die WHERE-Klausel nichts von der Suche ausschließt, die nicht Line = 1 ist. Ich sollte wahrscheinlich hinzufügen, dass ich eine viel kompliziertere Abfrage vereinfache. Es gibt mindestens 7 weitere linke Joins, aber dies ist die einzige, bei der ich eine einzige Transaktion für mehrere Ergebnisse habe. – DMC97

+0

Ich denke, andere Option ist mit etwas wie unten gehen '(Wählen Sie Artikel aus Tabelle2 wo transaction = table.transaction und Line = 1) END als item1, (Wählen Sie Artikel aus Tabelle2, wo transaction = table.transaction und Line = 2) END als Punkt 2, ' –

Verwandte Themen