Create table tb([No] nvarchar(250),[Name] nvarchar(250),[RefResult] int,[Subject] nvarchar(250),[Result] int)
Insert tb
select N'01',N'张三',75,N'科目1',74 union all
select N'01',N'张三',85,N'科目2',90 union all
select N'01',N'张三',95,N'科目3',93 union all
select N'02',N'李四',75,N'科目1',78 union all
select N'02',N'李四',85,N'科目2',84 union all
select N'02',N'李四',98,N'科目3',100
/*
要求结果
No Name 科目1 科目1参考 科目1差异 科目2 科目2参考 科目2差异 科目3 科目3参考 科目3差异
01 张三 74 75 -1 90 85 5 93 95 -2
02 李四 78 75 3 84 85 -1 100 98 2
合计 152 150 2 174 170 4 193 193 0
*/
备注:科目1,科目2,科目3是不确定的哟。
------解决思路----------------------
declare @sql nvarchar(4000)
set @sql=''
Select @sql=@sql+','+[Subject]+'=sum(case when [Subject]='''+[Subject]+''' then [Result] else 0 end)'
+','+[Subject]+'参考=sum(case when [Subject]='''+[Subject]+''' then[RefResult]else 0 end)'
+','+[Subject]+'差异=sum(case when [Subject]='''+[Subject]+''' then [Result]-[RefResult]else 0 end)'
FROM tb
group BY [Subject]ORDER BY[Subject]
PRINT @sql
exec('select [No]=isnull([No],''''),[Name]=isnull([Name],N''合计'')'+
@sql+'from tb group by [No],[Name] with rollup
having grouping([No])=1 or grouping([Name])=0
order by grouping([No]),[No]')