#sql #sql-server #group-by #case
#sql #sql-сервер #группировать по #случай
Вопрос:
Я планирую создать группу в SQL Server. Итак, с этим запросом у меня есть результат из 2 столбцов. Столбцы Groupings
и MemberCount
. В таком случае существует более одной строки Grp4
. Я полагаю, что в результате должно быть только 4 строки, чего я сейчас не знаю, как сделать.
SELECT
Groupings = CASE
WHEN clnDept = 'Dept1' THEN 'Grp1'
WHEN clnDept IN('Dept2', 'Dept3', 'Dept4') THEN 'Grp2'
WHEN clnDept = 'Dept5' THEN 'Grp3'
ELSE 'Grp4'
END,
MemberCount = Count(*)
FROM
tblEmpData
GROUP BY
clnDept
Как я собираюсь объединить или поместить в 1 строку результат grp4 с CASE ELSE 'Grp4'
? Принимая во внимание, что я, возможно, не знаю, что такое другой отдел.
Заранее спасибо за вашу помощь.
Ответ №1:
В некоторых базах данных можно использовать псевдоним столбца:
SELECT (CASE WHEN clnDept = 'Dept1' THEN 'Grp1'
WHEN clnDept IN('Dept2', 'Dept3', 'Dept4') THEN 'Grp2'
WHEN clnDept = 'Dept5' THEN 'Grp3'
ELSE 'Grp4'
END) as Groupings,
Count(*) as MemberCount
FROM tblEmpData
GROUP BY Groupings;
Или повторите case
выражение:
SELECT (CASE WHEN clnDept = 'Dept1' THEN 'Grp1'
WHEN clnDept IN('Dept2', 'Dept3', 'Dept4') THEN 'Grp2'
WHEN clnDept = 'Dept5' THEN 'Grp3'
ELSE 'Grp4'
END) as Groupings,
Count(*) as MemberCount
FROM tblEmpData
GROUP BY (CASE WHEN clnDept = 'Dept1' THEN 'Grp1'
WHEN clnDept IN('Dept2', 'Dept3', 'Dept4') THEN 'Grp2'
WHEN clnDept = 'Dept5' THEN 'Grp3'
ELSE 'Grp4'
END);
Комментарии:
1. при первом запросе получено сообщение об ошибке, столбец не существует, в то время как query2 отлично работает со мной, спасибо.
Ответ №2:
Это то, чего вы хотите?
WITH t as (
SELECT
Groupings = CASE
WHEN clnDept = 'Dept1' THEN 'Grp1'
WHEN clnDept IN('Dept2', 'Dept3', 'Dept4') THEN 'Grp2'
WHEN clnDept = 'Dept5' THEN 'Grp3'
ELSE 'Grp4' END,
MemberCount = Count(*)
FROM tblEmpData
GROUP BY clnDept
)
SELECT Groupings, SUM(MemberCount) FROM t
GROUP BY Groupings