sql按ID组合行,保留信息

时间:2018-04-25 19:02:43

标签: sql sql-server group-by row

我正在尝试找到一种基于ID号组合不同行的方法。

以下是一组示例行:

ID   |status     |Time
12345|  4        | 1:23
12345|  2        | 2:30
12345|  6        | 2:40
12345|  9        | 3:00

这些ID是相同的,所以我想将它们组合在一起,但仍然有每个状态的个别时间显示。我在想这样的事情:

ID   | Status 2 | Status 2 Time | Status 4  | Status 4 time | etc
12345| 2        | 2:30          | 4         | 1:23          | etc

这有可能吗?如果有另一种方式来连接这些ID会更容易,也会更好。谢谢!

1 个答案:

答案 0 :(得分:2)

因此,当可用状态仅在集合4,2,6或9中时,这将转动您的数据。如果您不知道此列中的值是什么,则需要构建并执行pivot作为动态sql。堆栈溢出中有这样的例子。

-------------------------
--test data schema
DECLARE @tempdata as TABLE(ID int, [status] int, [time] time)
insert into @tempdata values

(12345, 4, '1:23'),
(12345, 2, '2:30'),
(12345, 6, '2:40'),
(12345, 9, '3:00'),
-- some extra data to show what happens with another id
(12346, 4, '6:23'),
(12346, 2, '7:30'),
(12346, 6, '7:40'),
(12346, 9, '8:00')

-------------------------
--The query
SELECT *
FROM
    (SELECT * FROM @tempdata) t
PIVOT
    (MIN([time])
    FOR [status] in ([4],[2],[6],[9])) as pvt