代码之家  ›  专栏  ›  技术社区  ›  sweetu514

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

  •  0
  • sweetu514  · 技术社区  · 8 年前

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

    表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
    

    我试图在表1中设置一个新字段(名为FLAG),如果t1中存在行,则该字段将为Y。T2 else N中的年月日

    我想要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 回复  |  直到 8 年前
        1
  •  3
  •   Ali Azam adi    8 年前

    尝试使用以下查询:

    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

        2
  •  3
  •   Shushil Bohara    8 年前

    尝试以下操作: 使用 CASE 具有 LEFT JOIN 您可以检查t1是否存在。t2中的年月。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