0

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 で可能かどうかはわかりません。

4

1 に答える 1

4

データを行から列に変換する SQL Server でデータをピボットするには、いくつかの方法があります。

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;

デモで SQL Fiddle を参照してください

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) |
于 2013-04-05T11:04:06.597 に答える