日期:2014-05-18  浏览次数:20515 次

求助 简单的行转列问题
有表1  

列1       列2         列3       列4    
1标         a           12           10
1标         b           8             3
1标         c           2             5
1标         d           6             8
2标         a           6           10
2标         b           3           10
2标         c           8           10
2标         d           11           10
2标         f           2           10
3标         a           4             10
3标         d           12           10
3标         e           12           10
3标         f           12           10
4标         a           12           10
4标         b           12           10
4标         d           12           10
4标         f           12           10

如果能得到以下表(没有的就以null填充),其实也就是常说的行转列:

表2

列1       1标       2标       3标       4标
  a           12         6           4         12
  b           8           6         null     12
  c           2           8         null     null
  d           6           11       12         12
  e         null     null     12         null
  f         null       2         12         12


------解决方案--------------------
--如果列1的標的種類不是固定的
Declare @S Varchar(8000)
Select @S = ' Select 列2 As 列1 '
Select @S = @S + ', Max(Case 列1 When ' ' ' + 列1 + ' ' ' Then 列3 Else Null End) As [ ' + 列1 + '] '
From 表1 Group By 列1
Select @S = @S + ' From 表1 Group By 列2 '
EXEC(@S)
------解决方案--------------------
declare @sql varchar(8000)
set @sql = 'select 列2, '