Положите ваш запрос Resultset
в #temp
таблицу. Dynamic Sql
должно быть как можно короче. Его легко отладить.
create table #temp(Origin varchar(30),Destination varchar(30), Total int)
insert into #temp
values
('KHND','KSDL',8541)
,('KSNA','KHND',8359)
,('KHND','KPSP',8275)
,('KPSP','KHND',8267)
,('KHND','KCRQ',8266)
,('KCNO','KHND',8250)
,('KHND','KCNO',8237)
,('KHND','KTUS',8237)
,('KHND','KAPC',8215)
,('KCVO','KHND',8183)
declare @PvtCol varchar(500)=''
declare @Sql nvarchar(500);
--select * from #temp
;With CTE as
(
select Destination,total
,row_number()over(partition by Destination order by total desc)rn
from #temp
)
SELECT
@PvtCol = COALESCE(@PvtCol + ', ' + QUOTENAME(Destination), QUOTENAME(Destination))
FROM cte
where rn=1
--and Destination<>'KHND'
order by total desc
SET @PvtCol = STUFF(@PvtCol, 1, 1, '');
SELECT @PvtCol;
set @Sql='select Origin,'+@PvtCol+' from
(select Origin,Destination,Total from #temp /*where origin=''KHND''*/) as src
pivot(max(total) for Destination in( '+@PvtCol+')) as pvt';
print @Sql
execute sp_executesql @Sql
drop table #temp
, если вы ищете только индивидуальное происхождение, вы можете раскомментировать where origin=''KHND'' and --and Destination<>'KHND'