我需要您的帮助才能使用PIVOT函数(MSSQL)进行T-SQL查询,我有3个表:
项目:
Id | Name
1 | PE1XX
2 | PE2YZ
文件
Id | Name
1 | ARM
2 | LEX
3 | FSP
控制
Id | IdProject | IdFile| Result
1 | 1 | 1 | 100
2 | 1 | 2 | 50
3 | 1 | 3 | 0
4 | 2 | 2 | 75
我想这样查看我的数据。
结果集
ProjectName | ARM | LEX | FSP | ...*
PE1XX | 100 | 50 | 0 | ...
PE2YZ | NULL | 75 | NULL | ...
今天,我在代码中使用多个foreach生成了结果,但是它的性能昂贵。
Foreach(p in Project){
Foreach(f in File){
var result = getFirstControl(p.IdProject, f.IdFile);
...
}
}
我认为我们可以使用数据透视功能更快地执行此操作,但是我有一些问题需要设置(文件列表可以修改)...也许我可以更轻松地完成操作?
如果您需要动态
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName( [Name]) From [File] Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [ProjectName],' + @SQL + '
From (
Select ProjectName = P.[Name]
,Item = F.[Name]
,Value = C.[Result]
From [Control] C
Join [Project] P on C.IDProject = P.ID
Join [File] F on C.IDFile = F.ID
) A
Pivot (max(Value) For [Item] in (' + @SQL + ') ) p'
Exec(@SQL);
退货
ProjectName ARM FSP LEX
PE1XX 100 0 50
PE2YZ NULL NULL 75
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句