Я пытаюсь понять, как работает сводная таблица.
IF OBJECT_ID(N'tempdb..#exams') IS NOT NULL
BEGIN
DROP TABLE #exams
END
GO
create table #exams (
id uniqueidentifier,
exam nvarchar(max),
technician nvarchar(max)
)
insert into #exams
values
(newid(),'Esame1','Tecnico1'),
(newid(),'Esame2','Tecnico1'),
(newid(),'Esame1','Tecnico2'),
(newid(),'Esame3','Tecnico1'),
(newid(),'Esame3','Tecnico2'),
(newid(),'Esame3','Tecnico3'),
(newid(),'Esame3','Tecnico1')
Я знаю, как использовать регистр суммы, чтобы получить то, что я ищу:
select
exam,
sum(case when technician = 'Tecnico1' then 1 else 0 end) as Tecnico1,
sum(case when technician = 'Tecnico2' then 1 else 0 end) as Tecnico2,
sum(case when technician = 'Tecnico3' then 1 else 0 end) as Tecnico3
from #exams
group by exam
order by exam
exam Tecnico1 Tecnico2 Tecnico3
Esame1 1 1 0
Esame2 1 0 0
Esame3 2 1 1
Кстати, у меня много техников, и я хотел бы автоматизировать свои запросы с помощью динамических столбцов.
Когда я пробую сводной синтаксис
select * from (
select exam,
technician
from #exams
) as t
pivot
( count(exam)
for technician in (Tecnico1,Tecnico2,Tecnico3)
) as t
Я получаю только общую сумму
Tecnico1 Tecnico2 Tecnico3
4 2 1
Как я могу получить тот же результат синтаксиса регистра суммы?