2016-10-25 7 views
0

Meine Frage bezieht sich auf diese alte Abfrage von mir.Ich habe eine zusätzliche Anforderung und daher diese Frage.Wählen Sie die gleiche Spalte für verschiedene Werte in einer anderen Spalte und dann filtern

Select same column for different values on a different column

Unten ist mein Tisch und meine Anforderung ist seq3name zu finden, die mit ‚J‘ beginnt und dann auch die entsprechenden SEQ4NAME für denselben Mitarbeiter auswählen.

EMP_ID SEQ_NR NAME 
874830 3  JOHN     
874830 4  NOE   
874830 21  MIKE  
874830 22  BILL 
874830 23  ROBERT 
874830 24  STEVE 
874830 25  JERRY 

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX 
WHERE SEQ_NR = '3' AND NAME LIKE '%J'; 

Ausgang Wunsch

EMP_ID SEQ3NAME SEQ4NAME 
874830 JOHN  NOE 

Aber das Problem hier bekomme ich seq4name als NULL.Can Sie bitte eine Lösung, durch die beraten wir die Seq4name bekommen kann?

Danke für Ihre Hilfe.

+0

Sie nehmen die 'MAX()' 'von name'? –

+0

Nein, ich nehme MAX() von NAME nicht. Der Link oben hatte mehr Details. Aber ich denke nicht, dass der Link gut herauskam. –

Antwort

0

Wie ich Sie verstehe, versuchen Sie, alle Zeilen zu finden, in denen name s erster Buchstabe 'J' ist. Wenn ja, müssen Sie NAME LIKE 'J%' und nicht umgekehrt. Neben der Begrenzung von Zeilen mit SEQ_NR = 3 bedeutet dies, dass keine Zeilen mit SEQ_NR = 4 im Ergebnis gesetzt sind.

Ich denke, sollten Sie so etwas wie verwenden:

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX 
WHERE SEQ_NR =ANY(3,4) 
AND NAME LIKE 'J%' 
GROUP BY EMP_ID; 

EDIT eine andere Lösung

SELECT EMP_ID 
     MAX(CASE WHEN SEQ_NR = 3 AND NAME LIKE 'J%' THEN NAME END) AS SEQ3NAME 
     MAX(CASE WHEN SEQ_NR = 4 THEN NAME END) AS SEQ4NAME 
FROM AC_XXXXX e 
WHERE SEQ_NR =ANY(3,4) 
    AND EXISTS (select null 
       from AC_XXXXX se 
       where e.EMP_ID = se.EMP_ID 
       AND NAME LIKE 'J%') 
GROUP BY EMP_ID; 
+0

@ Michael.Vielen Dank für Ihre Antwort.Ich habe nur die gewünschte Ausgabe zu meiner ursprünglichen Abfrage hinzugefügt.Ich muss die seq3name, die mit 'J' beginnt und dann auch die entsprechende SEQ4NAME für den gleichen Mitarbeiter.Ich habe versucht Ihre Abfrage aber bekam SEQ4NAME immer noch als null. –

+0

Es ist nicht klar, was meinst du als entsprechende SEQ4NAME. Wie sollten Zeilen neu erstellt werden? Zeile mit SEQ_NR = 3 und SEQ_NR = 4? Ich sehe den gleichen emp_id aber anderen Namen. Kannst du meinen, dass du emp_id und SEQ3NAME nur dann bekommen musst, wenn NAME wie "J%" und null in anderen Fällen und SEQ4NAME immer sind? oder was? –

+0

Ja, sie sind durch die gleiche emp_ID verwandt. Die Namen sind abhängige Namen. Seq Nr 3 ist eine abhängige und seq nr 4 ist eine andere abhängig. Ich brauche die Mitarbeiter, deren abhängiger Name 3 mit J und auch die entsprechende abhängige 4 Namen beginnen ..Hope das klärt. –

Verwandte Themen