Объединить данные из другого обращения в группу по

#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