在Mysql中使用CASE将值设置为Alias字段

时间:2017-12-21 03:45:06

标签: mysql sql select case

我在Mysql中有2个表,如下所示

表1

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

表2

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

我正在尝试在table1中设置一个新字段(名为FLAG),如果在T2中存在t1.YEARMONTH行,则为Y,

我想要T1中的以下结果

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

我尝试了以下查询

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;

但它会产生以下输出

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

我不知道我的错误在哪里。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

试试这个:CASELEFT JOIN一起使用,可以检查t2.yearmonth中是否存在t1.yearmonth并相应地生成标志列

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

答案 1 :(得分:2)

尝试使用以下查询:

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

您可以在此处查看所需的输出http://sqlfiddle.com/#!9/162855/12