Sql 谁参观了房间

Sql 谁参观了房间,sql,transformation,rank,Sql,Transformation,Rank,我有一个带有userid、roomid和timestamp字段的表 每个房间可能有不同的用户ID: userId1 roomid1 12:15:17 userId1 roomid1 12:17:15 userId2 roomid1 13:17:15 userId3 roomid2 12:15:15 userId4 roomid2 12:15:18 userId5 roomid2 12:15:25 我需要一个查询,它将返回如下内容: roomid 1

我有一个带有
userid
roomid
timestamp
字段的表

每个房间可能有不同的
用户ID

 userId1 roomid1 12:15:17
 userId1 roomid1 12:17:15
 userId2 roomid1 13:17:15 
 userId3 roomid2 12:15:15
 userId4 roomid2 12:15:18
 userId5 roomid2 12:15:25
我需要一个查询,它将返回如下内容:

  roomid            1           2           3        4           5
  roomid1      userid1       userid2     userid3
  roomid2      userid4       userid5     userid6   userid7    userid8
所以我可以看到在整个游戏中,不同的用户访问了不同的房间


房间中最多可以有32个用户。

使用
枢轴

SELECT roomid, [userId1] AS userId1, [userId2] AS userId2, [userId3] AS userId3, [userId4] AS userId4, [userId5] AS userId5
FROM (SELECT timestamp, userid, roomid
      FROM yourtable) a
PIVOT
(COUNT (timestamp) 
 FOR userid IN ([userId1], [userId2], [userId3], [userId4], [userId5])
) AS b
ORDER BY b.roomid;
输出:

roomid  userId1 userId2 userId3 userId4 userId5
roomid1 2       1       0       0       0
roomid2 0       0       1       1       1

SQL Fiddle:

使用
透视点

SELECT roomid, [userId1] AS userId1, [userId2] AS userId2, [userId3] AS userId3, [userId4] AS userId4, [userId5] AS userId5
FROM (SELECT timestamp, userid, roomid
      FROM yourtable) a
PIVOT
(COUNT (timestamp) 
 FOR userid IN ([userId1], [userId2], [userId3], [userId4], [userId5])
) AS b
ORDER BY b.roomid;
输出:

roomid  userId1 userId2 userId3 userId4 userId5
roomid1 2       1       0       0       0
roomid2 0       0       1       1       1

SQL FIDLE:

您使用的是哪种dbms?RDBMS在这里很重要。。。但是你需要的是“动态透视”(或者32个最大分组的case语句。()这些在一些RDBMS中是可能的,但是在我看来,如果你有一个客户端,那么在客户端使用哪个dbms更好?RDBMS在这里很重要……但是你需要的是“动态透视”(或者32个最大分组的case语句。()这些事情在一些RDBMS中是可能的,但在我看来,如果你有一个,那么在客户端做会更好。我有大约500个用户ID,我怎么能不指定每个ID就完成它。而且我不需要他去过房间多少次,只是谁应该看起来像roomid 1 2 34 5 roomid1 userid1 userid2 userid3 roomid2 userid4 userid5 userid6 userid7 UserID8如上所述,使用动态透视,或将它们全部指定。检查描述示例我有大约500个用户ID如何在不指定每个用户ID的情况下执行此操作。此外,我不需要他被指定了多少次对于房间中应该看起来像roomid 1 2 3 4 5 roomid1 userid1 userid2 userid3 roomid2 userid4 userid5 userid6 userid7 userid8的人,如上所述,使用动态透视,或全部指定。检查描述示例