#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