我有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
由于
答案 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