Eya*_*yal 1 t-sql sql-server sql-server-2014
用Sql Server 2014:
我有两个表 - 事件和位置,它们共享一个时间列,我需要按时间将它们合并到一个表中.在Events表中有一个Event列,我需要在该事件之后的所有Locations行中放置(时间方面),这是一个示例:
事件:
time event
------------
09:00 2
09:10 3
10:15 1
10:17 2
10:30 3
Run Code Online (Sandbox Code Playgroud)
位置:
time X Y
-------------
09:01 1 3
09:02 2 3
09:05 4 1
09:09 6 4
09:10 7 8
09:11 8 8
09:12 9 7
10:17 1 2
10:19 5 4
10:20 4 3
10:25 5 4
10:28 3 5
Run Code Online (Sandbox Code Playgroud)
合并表:
time X Y event
--------------------
09:00 0 0 2
09:01 1 3 2 <
09:02 2 3 2 <
09:05 4 1 2 <
09:09 6 4 2 <
09:10 0 0 3
09:10 7 8 3 <
09:11 8 8 3 <
09:12 9 7 3 <
10:15 0 0 1
10:17 0 0 2
10:17 1 2 2 <
10:19 5 4 2 <
10:20 4 3 2 <
10:25 5 4 2 <
10:28 3 5 2 <
10:30 0 0 3
Run Code Online (Sandbox Code Playgroud)
标有"<"的元素是插入的事件.
欢迎任何关于如何执行此任务的想法和帮助.
你可以使用UNION ALL和APPLY:
SELECT
[Time], X = 0, Y = 0, [Event]
FROM [Events]
UNION ALL
SELECT l.*, x.Event
FROM Locations l
CROSS APPLY(
SELECT TOP 1 *
FROM [Events]
WHERE [Time] <= l.[Time]
ORDER BY [Time] DESC
)x
ORDER BY [Time]
Run Code Online (Sandbox Code Playgroud)