数据透视不合并 ID 上的行

Pivot not combining rows on ID

我尝试旋转的 table 看起来像这样:

|     Timestamp    | Userid | Event | message   | Id |
------------------------------------------------------
| 2016-09-01 08:40 | 600    | 0     | Created   | 1  |
| 2016-09-01 08:41 | 600    | 1     | Started   | 1  |
| 2016-09-01 08:42 | 600    | 2     | Completed | 1  |
| 2016-09-01 10:01 | 601    | 0     | Created   | 2  |
| 2016-09-01 10:01 | 601    | 1     | Started   | 2  |

这是我用来尝试旋转 table 的代码。

with mytable as (
select TimeStamp
    ,UserId
    ,event
    ,message
    ,Id
from dbname.tablename
where TimeStamp between '2016-09-01' and '2016-10-01'
)
select Id
    ,[0] as created
    ,[1] as started
    ,[2] as completed
    ,[4] as mismatch_reported
    ,[5] as reqstd_qty_updated
    ,[6] as starting_update
    ,[7] as replaced
from mytable
pivot
(max(timestamp) for event in ([0],[1],[2],[4],[5],[6],[7])) as pivottable 

我的预期结果是:

| Id |      created     |      started     |    completed    | mismatch_reported | ... | replaced |
---------------------------------------------------------------------------------------------------
| 1  | 2016-09-01 08:40 | 2016-09-01 08:41 | 2016-09-01 8:42 | NULL              | ... | NULL     |
| 2  | 2016-09-01 10:01 | 2016-09-01 10:01 | NULL            | NULL              | ... | NULL     |

我得到的结果是将所有时间戳拆分到它们自己单独的行中,ID 如下所示:

| Id |      created     |      started     |    completed    | mismatch_reported | ... | replaced |
---------------------------------------------------------------------------------------------------
| 1  | 2016-09-01 08:40 | NULL             | NULL            | NULL              | ... | NULL     |
| 1  | NULL             | 2016-09-01 08:41 | NULL            | NULL              | ... | NULL     |
| 1  | NULL             | NULL             | 2016-09-01 8:42 | NULL              | ... | NULL     |
| 2  | 2016-09-01 10:01 | NULL             | NULL            | NULL              | ... | NULL     |
| 2  | NULL             | 2016-09-01 10:01 | NULL            | NULL              | ... | NULL     |

我不知道为什么要这样做。在旋转方面,我是一个菜鸟,但我看到的所有示例都显示了旋转命令的工作方式与我预期的一样。

这个查询中的 pivot 语句出了什么问题?

______________________________________________________________

感谢TT。将我链接到这个! - 这将生成一个示例 table 供您进行故障排除

CREATE TABLE mytable(
   TimeStamp VARCHAR(23) NOT NULL PRIMARY KEY
  ,UserId    INTEGER  NOT NULL
  ,event     INTEGER  NOT NULL
  ,message   VARCHAR(31) NOT NULL
  ,Id        INTEGER  NOT NULL
);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:40:11.343',187,0,'Created',5);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:40:30.297',187,1,'Started',5);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:40:30.560',187,2,'Completed',5);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:42:00.167',238,1,'Started',6);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:41:59.667',238,2,'Completed',6);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:41:55.670',238,0,'Created',6);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:42:09.297',238,0,'Created',7);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:42:11.403',238,2,'Completed',7);
INSERT INTO mytable(TimeStamp,UserId,event,message,Id) VALUES ('2016-09-01 04:42:11.843',238,1,'Started',7);

我认为您的实际 table 中有一些附加列,您希望在其上进行数据透视,如果是这样的话,请尝试这样做: 创建一个派生的 table (SourceTable),以过滤您想要的特定列。

declare @a table ([Timestamp] datetime, [Event] int, Id int, a int )
insert into @a values ( '2016-09-01 08:40' , 0   ,   1 , 1 )
insert into @a values (  '2016-09-01 08:41',  1 ,     1 , 2 )
insert into @a values (  '2016-09-01 08:42',  2 ,     1 , 3  )
insert into @a values (  '2016-09-01 10:01',  0  ,    2  , 4 )
insert into @a values (  '2016-09-01 10:01' , 1  ,    2  , 5 )

 select Id
    ,[0] as created
    ,[1] as started
    ,[2] as completed
from
( 
select [Timestamp], [Event], Id from @a
) as SourceTable
pivot
(max(timestamp) for event in ([0],[1],[2])) as pivottable;

@a- 您的实际 table 和 SourceTable 派生的 table