Bra*_*ndi 12 sql t-sql sql-server join
我有两张桌子.表A列出了员工姓名.表B是一个复杂的表格,其中包含员工拨打电话的信息.
我的目标是创建一个包含列'name'和'callCount'的表.我的目标是通过'左连接'和'组合'来做到这一点,但我一直想念那些没有打电话的员工.我怎样才能让它保持名称并在那里放零?
也许我很亲密,有人可以指出我的拼写错误?在此先感谢您的帮助,这是SQL:
SELECT A.name, COUNT(B.call_id) AS 'outgoing call count'
FROM EmployeeTable A
LEFT JOIN CallTable B
ON A.name = B.call_from_name
WHERE B.call_type LIKE 'outgoing'
AND B.voice_mail = '0'
...
GROUP BY A.name
Run Code Online (Sandbox Code Playgroud)
gbn*_*gbn 33
这是一个JOIN而不是NULL问题:您的过滤器正在将OUTER更改为INNER JOIN.这意味着只有在CallTable(B)中有行而不是你想要的OUTER JOIN时才能获得COUNT.
SELECT A.name, COUNT(B.call_id) AS 'outgoing call count'
FROM
EmployeeTable A
LEFT JOIN
(
SELECT call_from_name, call_id FROM CallTable
WHERE call_type LIKE 'outgoing'
AND voice_mail = '0'
AND /* other CallTable filters */
) B
ON A.name = B.call_from_name
WHERE
/* only EmployeeTable A filters */
GROUP BY A.name
Run Code Online (Sandbox Code Playgroud)
编辑:在其他地方发表评论后,B上的所有过滤器必须位于派生表中,而不是位于外部的位置.
| 归档时间: |
|
| 查看次数: |
72393 次 |
| 最近记录: |