Преобразование таблицы категориальных данных в SQL Server

#sql #sql-server #sql-server-2012

Вопрос:

У меня есть два столбца Статус и Подтвержденный статус, которые я хочу преобразовать в столбцы для каждого из их уникальных значений для подсчетов. Как именно я могу это сделать в SQL Server?

Ввод

 Year Status Verified_Status --------------------------------- 2021 Accepted Verified 2021 Accepted Verified 2021 Rejected Unverified 2021 Accepted Unverified 2021 Accepted Unverified  2020 Rejected Unverified 2020 Accepted Unverified 2020 Accepted Unverified   

Ожидаемый результат

 Year Accepted Rejected Verified Unverified ------------------------------------------- 2021 4 1 2 3 2020 2 1 0 3  

Комментарии:

1. Проведите исследование «условных агрегатов».

Ответ №1:

Как намекнул Ларну… простая условная агрегация должна сделать свое дело

 Select Year  ,Accepted = sum( case when [Status]='Accepted' then 1 else 0 end )  ,Rejected = sum( case when [Status]='Rejected' then 1 else 0 end )  ,Verified = sum( case when [Verified_Status]='Verified' then 1 else 0 end )  ,Unverified = sum( case when [Verified_Status]='Unverified' then 1 else 0 end )  From YourTable  Group By Year  Order By Year Desc -- lt;lt; Optional  

Ответ №2:

 Select   Count(Case When Status = 'Accepted' then 1 end) Accepted,  Count(Case When Status = 'Rejected' then 1 end) Rejected,  Count(Case When Status = 'Verified' then 1 end) Verified,  Count(Case When Status = 'Unverified' then 1 end) Unverified  from T group by year  

Комментарии:

1. Пропущенный год, столбец проверенный_статус и группировка по