根据第一个表中的值在第二个表中的记录数

时间:2019-01-03 12:52:01

标签: sql sql-server

我有3张这样的桌子:

Schema

我想得到这个:

Output

“通知”表中有所有行(选定属性)。
然后是通知的位置名称。发生(Notification.Location_ID = Location.ID
以及在通知时间段内在同一位置发生的进程数。 (COUNT(Process.ID) WHERE Notification.Location_ID = Process.Location_ID AND DateTime > Begin AND DateTime < End

我认为正确连接Process table时遇到问题。
整个SQL查询应如何获得所需的输出?谢谢。

2 个答案:

答案 0 :(得分:1)

看起来前两个表之间的联接很好,所以,我建议您在SELECT子句的末尾在FROM之前添加以下子查询,以计算行的计数器。

(SELECT Count(*) FROM Process WHERE Process.Location_ID = Location.ID) AS Counter

如果在联接中包含了第三张表(过程),则必须将其删除。

答案 1 :(得分:0)

我认为您想加入process的公共位置ID,并且时间戳在时间范围内。

SELECT n.name,
       n.begin,
       n.end,
       l.name,
       count(p.id)
       FROM notification n
            LEFT JOIN location l
                      ON l.id = n.location_id
            LEFT JOIN process p
                      ON p.location_id = n.location_id
                         AND p.datetime >= n.begin
                         AND p.datetime < n.end
       GROUP BY n.name,
                n.begin,
                n.end,
                l.name;