我正在尝试从MS SQL Server 2005上的表创建一个视图,使用它的一些数据填充视图的列...一个简化的例子是一个表保存用户拥有的阶段的记录解锁,如:
UserID | Stage | Date
1 | 1 | 1-1-2013
1 | 2 | 2-1-2013
2 | 1 | 1-1-2013
1 | 3 | 5-1-2013
2 | 2 | 3-1-2013
3 | 1 | 6-1-2013
3 | 2 | 8-1-2013
1 | 4 | 10-1-2013
3 | 3 | 12-1-2013
我正在寻找一个类似的视图(如果有4个阶段可用):
UserID | Stage 1 | Stage 2 | Stage 3 | Stage 4
1 | 1-1-2013 | 2-1-2013 | 5-1-2013 | 10-1-2013
2 | 1-1-2013 | 3-1-2013 | |
3 | 6-1-2013 | 8-1-2013 | 12-1-2013 |
这些阶段是新视图的列。
我之前在Access上做过类似的事情,但不知道它是否可以在SQL Server上使用。
答案 0 :(得分:4)
有几种方法可以转移 SQL Server中的数据,将dats从行转换为列。
您可以使用CASE
表达式应用聚合函数:
select userid,
max(case when stage=1 then date end) Stage1,
max(case when stage=2 then date end) Stage2,
max(case when stage=3 then date end) Stage3,
max(case when stage=4 then date end) Stage4
from dbo.yourtable
group by userid;
或者您可以使用PIVOT
功能:
select userid, Stage1, Stage2, Stage3, Stage4
from
(
select userid, 'Stage'+cast(stage as varchar(10)) Stage, date
from dbo.yourtable
) d
pivot
(
max(date)
for stage in (Stage1, Stage2, Stage3, Stage4)
) piv;
见SQL Fiddle with Demo。两者的结果将是:
| USERID | STAGE1 | STAGE2 | STAGE3 | STAGE4 |
--------------------------------------------------------------
| 1 | 2013-01-01 | 2013-02-01 | 2013-05-01 | 2013-10-01 |
| 2 | 2013-01-01 | 2013-03-01 | (null) | (null) |
| 3 | 2013-06-01 | 2013-08-01 | 2013-12-01 | (null) |