我有一个非常可怕的两个表数据集,我需要创建一个连接查询。最好展示一个例子:
+------+---------+-----------+--+
| Time | Sent | Received | |
+------+---------+-----------+--+
| 1 | 100 | NULL | |
| 2 | NULL | 100 | |
| 3 | 50 | NULL | |
| 4 | NULL | 40 | |
| 5 | NULL | 10 | |
| 6 | 400 | 200 | |
| 7 | 100 | 200 | |
| 8 | NULL | 100 | |
| 9 | 500 | 500 | |
+------+---------+-----------+--+
假设上面的“时间”以小时为单位 - “已发送”显示该小时内发送的项目数,“已接收”显示收到的数量。问题是他们可能不会在发送的同一小时内到达(虽然他们可以)。
我需要将收到的内容与发送的相应内容进行匹配查找收到的项目已发送的时间。
使用上述内容:
下面是输出结果的示例(请注意,还有其他值与每个“已接收”行相关联,但它们与任务正交,并且只是求和以提供含义)
+------+----------+
| Time | Received |
+------+----------+
| 1 | 100 |
| 3 | 50 |
| 6 | 400 |
| 7 | 100 |
| 8 | 100 |
| 9 | 500 |
+------+----------+
我一直试图绕过这一段时间。如果我可以在sql之外执行此操作,我将有一些函数循环遍历每个'Sent'的值,通过时间递增并循环通过'Received'直到值匹配然后将那些Received值分配给Time索引,然后删除两者从数组发送和接收(或注意循环到达并从那里继续)
不幸的是,该项目不允许该范围 - 这必须在SQL中尽可能多地完成。我真的很茫然,希望有一些我忽略的SQL功能。非常感谢任何帮助
答案 0 :(得分:1)
如果这是在SQL Server中,您可以使用WHILE
循环。看看documentation。所以,你的项目可能看起来像这样:
CREATE TABLE #temp ([Time] int, [Received] int)
DECLARE @i int = 1
DECLARE @value int = 0
WHILE @i <= 9
BEGIN
@value = SELECT [Received] FROM [table] WHERE [Time] = @i
--Your logic here
INSERT INTO #temp ...
END
SELECT * FROM #temp
DROP TABLE #temp