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

标签 mysql sql select case

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

表一

   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),如果 t1.YEARMONTH 的行存在于 T2 中则为 Y,否则为 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

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

最佳答案

尝试使用以下查询:

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

关于mysql - 在 Mysql 中使用 CASE 将值设置为别名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917639/

相关文章:

python - 如何将 Telegram python变量值保存到本地数据库?

php - 如何将用户重定向到login.php并让它通过sqldatabase进行验证,如果那么用户可以直接下载链接

php - 有时允许动态 SQL 而不进行清理是否可以?

MySQL 将行转为动态数量的列

sql - 还有其他方法可以解决此查询吗?

vb.net - 当文本框获得焦点时选择文本框的内容

Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符

MySQL LIMIT 关键字优化问题

Mysql 使用 max 进行动态列单选

css - 在IE浏览器中的select标记选项之间添加空格