2016-11-11 1 views
1

У меня есть стол с userid, roomid и timestamp полей.которые побывали в номер

Каждый номер может иметь различную userIds:

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 пользователей.

+0

Какие СУБД вы используете? – jarlh

+0

Вопросы РСУБД здесь ... но вы после «динамического поворота» ([Пример SQL SERVER] (http://stackoverflow.com/questions/12210692/t-sql-dynamic-pivot) или 32 случая с максимальная группировка. ([пример примера mySQL] (http://stackoverflow.com/questions/20320631/how-to-pivot-a-table-in-mysql-using-case-statements)) – xQbert

+1

эти вещи возможны в некоторых RDBMS, но, на мой взгляд, гораздо лучше сделать это на стороне клиента, если у вас есть один –

ответ

0

Использовать PIVOT.

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 Скрипки: http://sqlfiddle.com/#!3/7df741/1/0

+0

У меня около 500 идентификаторов пользователей, как я могу это сделать без указания каждого из них. «т нужно, сколько раз он был в комнате, просто кто так Шоул выглядеть RoomID 1 2 3 4 5 roomid1 userid1 userid2 userid3 roomid2 userid4 userid5 userid6 userid7 userid8 –

+0

Как и выше, используйте динамический стержень или укажите их все. – Matt

+0

проверьте пример использования –

Смежные вопросы