我必须去桌子。一个用户(称为Actor
),另一个带订单(称为Ord
)。
每个订单都可以分配给一个用户,但并非所有订单都分配了用户。
我想制作一个返回所有用户的select语句,并显示为每个用户分配的订单数量。包括那些没有分配订单的用户。
非常简单,但出于某种原因,我无法让它发挥作用。
这是我到目前为止所得到的:
SELECT Usr, COUNT(Ord.OrdNo)
FROM Actor
LEFT JOIN Ord on Actor.EmpNo = Ord.Rsp
WHERE Actor.Gr2 <> 9
AND Actor.R1 = 10
AND Ord.OrdTp = 6
AND Ord.OrdPrSt2 != 0x10
GROUP BY Actor.Usr
这只会返回分配了订单的用户,但我希望所有用户都返回,如果他们没有分配订单,则返回零。
请忽略WHERE
条款(我还没有在下面的示例数据中包含列/值)。尽管如此,我仍然可以在我的实时数据上运行查询时返回大约10个用户。
示例数据
表:演员
Usr EmpNo
----------------
ben 123
jane 124
jack 125
tom 126
表:订单
OrdNo Rsp
----------------
555551 123
555552 123
555553 124
555554 126
这是我想要的回复:
Usr Count
----------------
123 2
124 1
125 0
126 1
但我得到了这个:
Usr Count
----------------
123 2
124 1
126 1
那么我错过了什么?
答案 0 :(得分:1)
将Ord条件从WHERE
移至ON
以获得真实LEFT JOIN
结果:
SELECT Usr, COUNT(Ord.OrdNo)
FROM Actor
LEFT JOIN Ord on Actor.EmpNo = Ord.Rsp
AND Ord.OrdTp = 6
AND Ord.OrdPrSt2 != 0x10
WHERE Actor.Gr2 <> 9
AND Actor.R1 = 10
GROUP BY Actor.Usr
答案 1 :(得分:0)