Использование CASE в Mysql для установки значения в поле Alias

0

У меня есть 2 таблицы в 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

Я пытаюсь установить новое поле (называемое FLAG) в таблице1, которое будет Y, если строки существуют для t1.YEARMONTH в 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

Я не знаю, где моя ошибка. Любая помощь будет оценена по достоинству.

Теги:
select
case

2 ответа

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

  • 0
    @ sweetu514 Я обновил свой ответ по мере необходимости. Можете ли вы увидеть мой ответ.
  • 0
    @ sweetu514 Вы должны также отметить и принять ответ, так как это правильный ответ. Спасибо
3

ПОПРОБУЙТЕ ЭТО: Используя CASE с LEFT JOIN вы можете проверить существование t1.yearmonth в 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню