T-SQL查询PIVOT

用户名

我需要您的帮助才能使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章