Сводное предложение SQL Server со счетом

#sql #sql-server #tsql #count #pivot

#sql #sql-сервер #tsql #подсчет #сводный

Вопрос:

Я использую Microsoft SQL Server и пытаюсь написать следующий запрос ниже. Я хочу использовать сводное предложение, чтобы получить количество золотых медалей для США и России с Олимпийских игр 2000 года. Но мой результат равен нулю для обеих стран. Я знаю, что могу использовать group by для получения желаемого результата (см. Экран печати ниже). Но как это сделать с помощью сводного предложения?

Пожалуйста, смотрите экраны печати набора данных и выходных данных ниже

 select 
    'Gold' as total_m, 
    ['USA'] as USA, ['RUS'] as RUS
from 
    (select 
         country, medal, year
     from 
         summer
     where 
         medal = 'Gold'
         and year = 2000 
         and country in ('USA', 'RUS')) as SourceTable
pivot
    (count(medal)   
     for country in (['USA'],['RUS'])) as PivotTable;
  

Набор данных

введите описание изображения здесь

Вывод

введите описание изображения здесь

Группировать по

введите описание изображения здесь

Ответ №1:

Удалить quotes из pivot списка столбцов,

 select 'Gold' as total_m, [USA] as USA, [RUS] as RUS
from 
    (select country, medal, year
     from summer
     where medal = 'Gold'
       and year = 2000 
       and country in ('USA', 'RUS')) as SourceTable
pivot
    (count(medal)   
     for country in ([USA],[RUS])) as PivotTable;
  

Ответ №2:

Я считаю, что это проще выразить с помощью условной агрегации. Это переносимый синтаксис, который работает в большинстве баз данных и который как-то менее запутан, pivot чем синтаксис конкретного поставщика:

 select mdel, 
    sum(case when country = 'USA' then 1 else 0 end) as USA,
    sum(case when country = 'RUS' then 1 else 0 end) as RUS
from summer
where medal = 'Gold' and year = 2000 and country in ('USA', 'RUS')
group by medal