【发布时间】:2016-05-13 21:27:52
【问题描述】:
我有两个相同列的不同表。一个是#temp1,另一个是#temp2。
附加的图像包含每个表的数据集。
我写了一个查询来获取数据。这是查询:
SELECT distinct A.EmpID, A.DeptIdID, A.RoomID,
IN= CASE WHEN DATEDIFF(S, A.IN, B.IN) >= 0 THEN B.IN ELSE A.In END,
Out= CASE WHEN DATEDIFF(S, A.Out, B.Out) >= 0 THEN A.Out ELSE B.Out END
FROM #temp1 A
INNER JOIN #temp2 B
ON (A.In>= B.In AND A.In< B.In)
OR (A.Out> B.OutAND A.Out<= B.Out)
我想要的是从#temp1 中获取数据,其In 和out 属于#temp2 的In 和Out 之间。上面的查询对于绝对输入和输出非常有效。
考虑#temp1 的第11 号条目和#temp2 的第1 号和第4 号条目。 #temp1 的进出条目是从 4 月 17 日到 4 月 20 日,而在 #temp2 中有两个此日期范围的条目。一个是从 4 月 12 日到 4 月 18 日,另一个是从 4 月 18 日到 4 月 20 日。因此,#temp1 的结果应该分成以下两个条目。
- 4 月 17 日 - 4 月 18 日,#temp2 的列值中 RoomId=1。
- 4 月 18 日至 4 月 20 日,RoomId=2,来自 #temp2 的列值。
#temp1 应该只有唯一的列。
【问题讨论】:
-
这是一个很好的起点。 spaghettidba.com/2015/04/24/…
-
您的示例非常有限。例如,如果另一个表的一个大范围内有几个较小的范围,应该怎么办?如果有人真的想帮助你,你的数据应该是文本/插入子句/在 sql fiddle 中,而不是必须从图片中写入数据。
-
可能是一个有趣的问题,但不清楚您想要实现什么或数据意味着什么。我认为 empid 是独一无二的。房间是由deptid + roomid唯一定义的吗?这两张表是否代表两个部门的房间 deptid = 1 和 0 以及谁预订了它们以及他们使用的预订日期?看起来 JOIN 条件不会返回任何行。
标签: sql sql-server sql-server-2008 tsql