2017-12-21 14 views
0

I 2 Tabellen in Mysql haben, die alsVerwendung von CASE in Mysql Wert auf einen Alias-Feld zu setzen

Tabelle 1

ID YEARMONTH 
    ------------------ 
    1 201210 
    2 201211 
    3 201212 

Table2

ID YEARMONTH GRADE DESIG 
-------------------------------- 
    1 201210  G1  NULL 
    2 201210  G1  D2 
    3 201212  G1  D1 

ich gesetzt bin versucht, folgt aussieht ein neues Feld (genannt FLAG) in table1, das Y ist, wenn Zeilen für t1.YEARMONTH in T2 existieren, sonst N

Ich möchte die f Ergebnis in T1 ach

ID YEARMONTH FLAG 
--------------------- 
1 201210 Y 
2 201211 N 
3 201212 Y 

Ich habe die folgende Abfrage versucht

SELECT 
    T1.ID, 
    T1.YEARMONTH, 
    CASE COUNT(T2.ID) 
    WHEN (SELECT 
     COUNT(T2.ID) 
     FROM TABLE2 T2) 
     > 0 THEN 'Y' 
    ELSE 'N' 
    END AS flag 
FROM TABLE1 T1, 
    table2 T2; 

Aber es erzeugt die folgende Ausgabe

ID YEARMONTH FLAG 
--------------------------- 
1 201210  N 

Ich weiß nicht, wo mein Fehler liegt. Jede Hilfe wäre willkommen.

Antwort

2

Versuchen Sie, die folgenden Kriterien:

SELECT 
    T1.ID, T1.YEARMONTH, 
    (CASE 
    WHEN COUNT(T2.ID) > 0 THEN 'Y' 
    ELSE 'N' 
    END) AS FLAG 
FROM TABLE1 T1 
LEFT JOIN TABLE2 T2 
ON T1.YEARMONTH = T2.YEARMONTH 
GROUP BY T1.ID, T1.YEARMONTH 

Sie können die erforderliche Ausgabe hier sehen http://sqlfiddle.com/#!9/162855/12

+0

@ Sweetu514 Ich aktualisierte meine Antwort als yo Dein Bedürfnis. Kannst du bitte meine Antwort sehen? –

+0

@ Sweetu514 Sie sollten auch Häkchen und akzeptieren Sie die Antwort, da es die richtige Antwort ist. Vielen Dank –

3

versuchen Sie dies: Mit CASE mit LEFT JOIN Sie die Existenz von t1.yearmonth in t2.yearmonth überprüfen und erzeugen die Flag-Spalte entsprechend

SELECT DISTINCT t1.id, 
    t1.yearmonth, 
    (CASE WHEN t2.yearmonth IS NOT NULL THEN 'y' ELSE 'n' END) flag 
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.yearmonth = t2.yearmonth