加入3个数据库表,计数为0

时间:2018-01-25 02:31:36

标签: sql sql-server tsql

我有3张桌子:

资产 AssetId | ASSETNAME

路由器 RouterId | RouterName

跟踪 TrackingId | RouterId |由assetid

我想计算跟踪表中存在的每个路由器(有一个条目)检测到的资产数量。因此,如果我在跟踪中有3个路由器的3条记录,但只有2条路由器检测到特定资产,则结果集将列出该资产的所有3个路由器,其数量为0。我希望结果集包含RouterName,AssetName,Count(AssetId)。

这是我的疑问:

SELECT 
    r.RouterName, a.AssetName, Count(t.AssetId) AssetCount
FROM 
    Tracking t LEFT JOIN Router r ON r.RouterId = t.RouterId
    LEFT JOIN Asset a ON a.AssetId = t.AssetId
GROUP BY
    r.RouterName, a.AssetName
ORDER BY
    a.AssetName

我只获得具有该查询的Tracking表中包含RouterId和AssetId组合的记录。

我需要这样的结果:

RouterName | AssetName | AssetCount
Router 1 | Asset 1 | 2
Router 2 | Asset 1 | 0
Router 3 | Asset 1 | 1
Router 1 | Asset 2 | 0
Router 2 | Asset 2 | 4
Router 3 | Asset 2 | 1

由于

1 个答案:

答案 0 :(得分:0)

如果要保留所有路由器,那么它应该是LEFT JOIN中的第一个表。如果您想计算资产,那么它不应该在GROUP BY

SELECT r.RouterName, Count(t.AssetId) as AssetCount
FROM Router r LEFT JOIN
     Tracking t 
     ON r.RouterId = t.RouterId LEFT JOIN
     Asset a
     ON a.AssetId = t.AssetId
GROUP BY r.RouterName
ORDER BY r.RouterName