Проблема с GROUP BY CASE - PullRequest
       16

Проблема с GROUP BY CASE

3 голосов
/ 16 августа 2010

Следующий запрос выдает ошибку «# 1241 - Операнд должен содержать 1 столбец (столбцы)» из-за строки (Department_Code, Course_Code). Когда я заменяю это просто (Course_Code), это работает. Однако это не то, что я хочу

SELECT * FROM Classes
GROUP BY CASE 
WHEN (1) THEN
 Department_Code
 ELSE CASE WHEN (2) THEN 
  (Department_Code, Course_Code)
 ELSE Class_ID
 END
END

Как сгруппировать по Department_Code, Course_Code, когда условие (2) выполнено?

Ответы [ 2 ]

5 голосов
/ 16 августа 2010
Выражение

A case может возвращать только одно значение, поэтому вам нужно два выражения case.Кроме того, используйте одно case выражение для каждого, вместо того, чтобы вкладывать два внутри друг друга:

SELECT * FROM Classes
GROUP BY
  CASE 
  WHEN (1) THEN
    Department_Code
  WHEN (2) THEN 
    Department_Code
  ELSE
    Class_ID
  END,
  CASE 
  WHEN (2) THEN 
    Course_Code
  ELSE
    1
  END
0 голосов
/ 21 февраля 2019

Была такая же проблема, но был найден более простой способ, заключающийся в создании вспомогательного поля, на которое затем можно ссылаться в GROUP BY. Или вы можете сделать тот же условный трюк, поместив его в GROUP BY, при условии, что вы заполните поля.

SELECT *,

If( 'whatever field to check' = 2 , CONCAT(Department_Code,Course_Code), Course_Code) AS 'group1'

FROM Classes
GROUP BY group1
...