使用Sql Server 2014
:
我有两个表 - 事件和位置,它们共享一个时间列,我需要按时间将它们合并到一个表中。在Events表中有一个Event列,我需要在该事件后面的所有Locations行中放置(时间方面),这是一个例子:
活动:
time event
------------
09:00 2
09:10 3
10:15 1
10:17 2
10:30 3
地点:
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
合并表:
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
标有'&lt;'的元素是插入的事件。
欢迎任何关于如何执行此任务的想法和帮助。
答案 0 :(得分:5)
您可以使用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]