【问题标题】:Count of column from joined table but include zeroes (can't get LEFT JOIN to work)连接表中的列计数但包含零(无法让 LEFT JOIN 工作)
【发布时间】:2018-11-28 05:52:51
【问题描述】:

我必须要桌子。一个是用户(称为Actor),一个是订单(称为Ord)。

每个订单可以分配给一个用户,但并非所有订单都有用户分配。

我想创建一个选择语句来返回我的所有用户并显示每个用户分配了多少订单。包括那些没有分配订单的用户。

很简单,但由于某种原因我无法让它工作。

这是我目前得到的:

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

那么我错过了什么?

【问题讨论】:

  • 只需使用LEFT OUTER JOIN 而不是Left JOIN
  • @HasanGholamali,同样的事情......

标签: sql sql-server join select left-join


【解决方案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

【讨论】:

  • 就是这样!谢谢你:)
【解决方案2】:

如果没有 where 条件,我会得到想要的结果。这是我运行的代码:

选择一个.empno, 计数(ordrno)
从演员 a 左加入命令 b 在 a.empno = b.rsp
按 a.empno 分组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多