2016-09-15 3 views
0

Ich habe die unten als Ergebnis meiner Abfrage. Bitte beachten Sie, dass dies an mehreren Tabellen erfolgt.Wählen Sie eindeutigen Wert für eine Spalte in mehreren Tabelle

EMAIL(A) PROD_ID(B) PROD_NAME(B) CODE(C) 
[email protected] 123456  SUNLIGHT A  002 
[email protected] 123456  SUNLIGHT B  002 
[email protected] 123456  SUNLIGHT C  002 
[email protected] 768901  MOON   003 
[email protected] 881231  STAR   004 

Meine Abfrage ist wie folgt.

SELECT A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE 
FROM A 
INNER JOIN B ON B.EMAIL = A.EMAIL 
INNER JOIN C ON C.CODE = B.CODE 
GROUP BY A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE 
ORDER BY A.EMAIL, C.CODE 

Ich brauche pro PROD_ID nur 1 Reihe von Daten zu erhalten. Ich habe versucht mit MAX(B.PROD_ID) AS "PROD_ID", aber ich bekomme immer noch mehrere Zeile für PROD_ID. Kann jemand dazu etwas vorschlagen? Oder hilf mir? Danke vielmals!

Das gewünschte Ergebnis ist:

EMAIL(A) PROD_ID(B) PROD_NAME(B) CODE(C) 
[email protected] 123456  SUNLIGHT A  002 
[email protected] 768901  MOON   003 
[email protected] 881231  STAR   004 

Jede Hilfe sehr geschätzt wird. DANKE!

Antwort

2

Sie müssen PROD_NAME irgendwie komprimieren/zusammenfassen. Ich habe MIN verwendet, da es mit Ihrem gewünschten Ergebnis übereinstimmt. Sie können jedes Aggregat verwenden, das zu Ihnen passt:

SELECT A.EMAIL, B.PROD_ID, MIN(B.PROD_NAME), C.CODE 
FROM A 
INNER JOIN B ON B.EMAIL = A.EMAIL 
INNER JOIN C ON C.CODE = B.CODE 
GROUP BY A.EMAIL, B.PROD_ID, C.CODE 
ORDER BY A.EMAIL, C.CODE 
+0

Vielen Dank! Ich habe versucht, MAX zu benutzen, ohne zu wissen, dass MIN es schafft. :) Danke vielmals! – thebeast22

+0

Ich denke, diese Abfrage wird nicht ordnungsgemäß funktionieren, wenn Spalte E-Mail verschiedene Werte enthalten wird. – AlexSmet

+0

Ja, jedoch kann der gleiche Trick verwendet werden. –

Verwandte Themen