У меня есть две таблицы в SQL Server, которые я хочу переставить по ряду строк в порядке столбцов по ID
/ Name
(в зависимости от того, что мне подходит) и отсортировать по Date
.
[dbo].[USERINFO]
:
+--------+-------------+---------+
| USERID | BADGENUMBER | NAME |
+--------+-------------+---------+
| 1 | 1000 | BEN |
+--------+-------------+---------+
| 2 | 1111 | ANNE |
+--------+-------------+---------+
[dbo].[CHECKINOUT]
:
+--------+-------------------------+
| USERID | CHECKTIME |
+--------+-------------------------+
| 1 | 2019-02-16 08:01:39.000 |
+--------+-------------------------+
| 1 | 2019-02-16 13:05:21.000 |
+--------+-------------------------+
| 1 | 2019-02-16 14:42:23.000 |
+--------+-------------------------+
| 1 | 2019-02-16 17:07:55.000 |
+--------+-------------------------+
| 1 | 2019-02-18 07:56:23.000 |
+--------+-------------------------+
| 1 | 2019-02-18 19:48:23.000 |
+--------+-------------------------+
| 2 | 2019-02-16 07:43:57.000 |
+--------+-------------------------+
| 2 | 2019-02-16 12:30:04.000 |
+--------+-------------------------+
| 2 | 2019-02-18 06:52:55.000 |
+--------+-------------------------+
| 2 | 2019-02-18 18:01:41.000 |
+--------+-------------------------+
| 2 | 2019-02-19 07:55:17.000 |
+--------+-------------------------+
| 2 | 2019-02-19 12:30:08.000 |
+--------+-------------------------+
| 2 | 2019-02-20 07:52:15.000 |
+--------+-------------------------+
| 2 | 2019-02-20 17:51:49.000 |
+--------+-------------------------+
Я ожидаю такой результат.
+------+------+------------+----------+----------+----------+----------+--------+
| ID | Name | Date | Time1 | Time2 | Time3 | Time4 | Time5 |
+------+------+------------+----------+----------+----------+----------+--------+
| 1111 | ANNE | 16/02/2019 | 07:43:57 | 12:30:04 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
| 1111 | ANNE | 18/02/2019 | 06:52:55 | 18:01:41 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
| 1111 | ANNE | 19/02/2019 | 07:55:17 | 12:30:08 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
| 1111 | ANNE | 20/02/2019 | 07:52:15 | 17:51:49 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
| 1000 | BEN | 16/02/2019 | 08:01:39 | 13:05:21 | 14:42:23 | 17:07:55 | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
| 1000 | BEN | 18/02/2019 | 07:56:23 | 19:48:23 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+--------+
Либо ORDER BY ID, либо ORDER BY Name isхорошо.
Пока я пробовал это
SELECT *
INTO #Temp
FROM (
SELECT U.BADGENUMBER as ID, U.[NAME] as Name,
CONVERT(VARCHAR(10),C.CHECKTIME, 103) [Date],
CONVERT(VARCHAR(8), C.CHECKTIME, 108) [Time]
FROM [CHECKINOUT] as C JOIN [USERINFO] as U
ON C.USERID = U.USERID
) AS x
SELECT ID, Name, Date, [1] as Time1, [2] as Time2, [3] as Time3,
[4] as Time4, [5] as Time5, [6] as Time6, [7] as Time7, [8] as Time8, [9] as Time9
FROM ( SELECT
ID, Name, Date, Time,
row_number() over (partition by Name order by Date) as rn
from #Temp
) s
PIVOT (
MAX([Time]) for rn in ([1], [2], [3], [4], [5], [6], [7], [8], [9])
) as pvt
ORDER BY ID
DROP TABLE #Temp
на основе этой ссылки .
Вместо этого я получил такой результат,
+------+------+------------+----------+----------+----------+----------+----------+
| ID | Name | Date | Time1 | Time2 | Time3 | Time4 | Time5 |
+------+------+------------+----------+----------+----------+----------+----------+
| 1111 | ANNE | 16/02/2019 | 07:43:57 | 12:30:04 | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+----------+
| 1111 | ANNE | 18/02/2019 | NULL | NULL | 06:52:55 | 18:01:41 | NULL |
+------+------+------------+----------+----------+----------+----------+----------+
| 1111 | ANNE | 19/02/2019 | NULL | NULL | NULL | NULL | 07:55:17 |
+------+------+------------+----------+----------+----------+----------+----------+
| 1111 | ANNE | 20/02/2019 | NULL | NULL | NULL | NULL | NULL |
+------+------+------------+----------+----------+----------+----------+----------+
| 1000 | BEN | 16/02/2019 | 08:01:39 | 13:05:21 | 14:42:23 | 17:07:55 | NULL |
+------+------+------------+----------+----------+----------+----------+----------+
| 1000 | BEN | 18/02/2019 | NULL | NULL | NULL | NULL | 07:56:23 |
+------+------+------------+----------+----------+----------+----------+----------+
Какую часть я сделал неправильно?Пожалуйста, укажите для меня.Заранее спасибо.С уважением.