Dav*_*ite 5 sql-server join group-by count subquery
我试图在一个查询中进行左连接,但似乎我在某处错了.
table machines
--------------
machineID
FaNo
Barcode
RoutingCode
Name
table log
-------------
logID
lineBarcode
machineBarcode
Run Code Online (Sandbox Code Playgroud)
在日志表中有机器和线路上的记录.在一条线上可以有许多不同的机器和机器来自同一类型.
机器类型是routingCode,所以我有兴趣选择生产线中的所有机器并对它们进行分组.只有不同的机器routingCode应该单独显示,我想得到各种机器的数量.
这是通过这种方式完成的.
SELECT routingcode, name, count(1)
FROM machines
JOIN log ON log.machinebarcode = machines.barcode
WHERE log.linebarcode = 100000000001
GROUP BY routingcode, name
Run Code Online (Sandbox Code Playgroud)
好吧一切都运行顺利,但这样我只得到log表中相关的机器并根据记录linebarcode.
我认为,如果我LEFT JOIN在日志表中,我将从表中获取所有机器machines并显示它们,当然只有log表中找到的机器才能正常count,但没有.
我在哪里误以及如何找到合适的解决方法?
您需要将条件 onlog放入on子句而不是where. 左外连接保留的非匹配行将为 中的所有列进行 null 扩展log。
如果条件在 中,带有NULLfor的行将再次被删除。log.linebarcodewhere
另外,COUNT(1)您不需要计算一列,而log不会是NULL
SELECT routingcode,
name,
count(log.linebarcode)
FROM machines
LEFT JOIN log
ON log.machinebarcode = machines.barcode
AND log.linebarcode = 100000000001
GROUP BY routingcode,
name
Run Code Online (Sandbox Code Playgroud)