关于数据行列转换的问题[再发]

现有表A
ID Name
-------------
1 A
2 B
3 C
4 D

表B
ID Stage
-------------
1 M
2 N
3 P
4 Q

表C
ID  NameID StageID DoTime
----------------------------------------------
1   1     1    2011-6-13
2   2     2    2011-6-14
3   1     2    2011-6-12
4   2     1    2011-6-11
5   3     1    2011-6-10
6   3     3    2011-6-11
7   4     1    2011-6-12
8   4     2    2011-6-13
9   1     4    2011-6-15
10  2     4    2011-6-16
11  3     4    2011-6-17
12  4     4    2011-6-18

需要得到如下查询结果:

ID Name  M      N       P      Q
--------------------------------------------------------------------------------
1  A   2011-6-13  2011-6-12  <NULL>  2011-6-15
2  B   2011-6-11  2011-6-14  <NULL>  2011-6-16
3  C   2011-6-10  <NULL>   2011-6-11 2011-6-17
4  D   2011-6-12  2011-6-13  <NULL>  2011-6-18

注:开发环境SQL2000,表中数据均为动态数据。

作者: bimyboy   发布时间: 2011-06-16

SQL code
--SQL SERVER 2000 动态SQL
declare @sql varchar(8000)
set @sql = 'select Name '
select @sql = @sql + ' , max(case Stage when ''' + Stage + ''' then DoTime else 0 end) [' + Stage + ']'
from (select distinct Stage from b) as tb
set @sql = @sql + ' from (select a.Name,b.Stage,c.DoTime from a,b,c where a.id=c.NameID and b.id=c.StageID) tb1 group by Name'
exec(@sql) 

作者: cd731107   发布时间: 2011-06-16