Я хотел бы сгруппировать определенные значения в результирующем наборе как новое значение.SQL GROUP BY значения набора результатов под новым значением
например, мой набор результатов:
KS2
2a
3c
4c
3c
2a
2a
1c
No KS2
1b
2c
5c
4c
Мой currrent SQL на дне результатов группы в следующем:
KS2
2a
3c
4c
1c
No KS2
1b
2c
5c
4c
Я хотел бы сгруппировать значения 1a, 1b и 1c в одна строка под значениями 1 и 2a, 2b и 2c как 2. Все остальные значения должны группироваться нормально. Так что мой результирующий набор будет выглядеть так:
KS2
2
3c
4c
1
No KS2
5c
4c
Вот мой код, как он стоит:
GROUP BY
CASE Name
WHEN 'English' THEN
CASE WHEN [Ks2en]=NULL OR [Ks2en]='' THEN
'No KS2'
ELSE
[Ks2en]
END
WHEN 'Mathematics' THEN
CASE WHEN [Ks2ma]=NULL OR [Ks2ma]='' THEN
'No KS2'
ELSE
[Ks2ma]
END
ELSE
CASE WHEN [Ks2av]=NULL OR [Ks2av]='' THEN
'No KS2'
ELSE
[Ks2av]
END
END
EDIT: Вот решение, основанное на ответ EricZ в:
GROUP BY
CASE Name
WHEN 'English' THEN
CASE WHEN [Ks2en] IS NULL OR [Ks2en]='' THEN
'No KS2'
WHEN [Ks2en] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2en] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2en]
END
WHEN 'Mathematics' THEN
CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN
'No KS2'
WHEN [Ks2ma] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2ma] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2ma]
END
ELSE
CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN
'No KS2'
WHEN [Ks2av] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2av] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2av]
END
END
Вы можете поделиться полный запрос и пример ваших данных? Какую колонку имен вы группируете? – Mureinik
@Mureinik - Я добавил полный запрос для вас. Столбец, который я группирую, это «KS2», который является значениями в Ks2en, Ks2ma или Ks2av в зависимости от содержимого переменной SubjectName. – Matt
Теперь это то, что я называю безопасностью работы. Иногда бывает лучше разбить запросы на несколько более мелких. – Trent