Tarun Kumar Ответов: 1

Как создать динамическую сводку для нескольких сотен записей в SQL server


У меня есть несколько сотен тысяч записей для динамического поворота. Я попробовал следующий запрос, и он отлично работает для выбранного идентификатора employee id.
и когда я хочу свернуть все записи сотрудников, это занимает очень много времени. Это правильный путь, чтобы сделать или какой-нибудь лучший способ сделать? Я прекратил казнь через полчаса, так как не получил результата.

Что я уже пробовал:

<pre lang="SQL">declare @cols nvarchar(max)=N'',@sql nvarchar(max)=N'',@uniqcols nvarchar(max)=N'' 
select @cols=isnull(@cols+',','')+QUOTENAME(concat(format(FromDate,'Y'),' to ',format(ToDate,'Y'))) 
from  salaries 
where EmpId=15001 
print @cols  
set @sql= 'select Firstname '+@cols+' 
from 
(     
select e.Empid,e.Firstname,concat(format(s.FromDate,''Y''),'' to '',format(s.ToDate,''Y'')) as period,s.salary      
from employees e join salaries s      
on e.EmpId=s.Empid      
where e.EmpId=15001 
)as source 
pivot 
(     
sum(salary) for period in ('+stuff(@cols,1,1,'')+') 
)as derived' 
print @sql 
exec sp_executesql @sql


<pre lang="SQL">declare @cols nvarchar(max)=N'',@sql nvarchar(max)=N'',@uniqcols nvarchar(max)=N'' 
select @cols=isnull(@cols+',','')+QUOTENAME(concat(format(FromDate,'Y'),' to ',format(ToDate,'Y'))) 
from  salaries
print @cols  
set @sql= 'select Firstname '+@cols+' 
from 
(     
select e.Empid,e.Firstname,concat(format(s.FromDate,''Y''),'' to '',format(s.ToDate,''Y'')) as period,s.salary      
from employees e join salaries s      
on e.EmpId=s.Empid      
)as source 
pivot 
(     
sum(salary) for period in ('+stuff(@cols,1,1,'')+') 
)as derived' 
print @sql 
exec sp_executesql @sql



Есть ли какой-либо другой способ увеличить этот динамический сводный запрос за меньшее время?
Заранее спасибо.

1 Ответов

Рейтинг:
5

Maciej Los

Проверьте мой прошлый ответ: Ежемесячная сумма в сводной таблице[^]