我想从两个以上连接的表中计算数据库中的记录数。
例如,我有一张这样的表。
table
jobd + name
1 | jobA
2 | jobB
tableA
imgeid + orderid + jobid
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1 (this order is not yet started)
tableB
taskid + orderid + task + status
1 | 1 | 1 | UPDATED
2 | 1 | 1 | UPDATED
3 | 1 | 1 | COMPLETED
4 | 2 | 2 | SAVED
5 | 3 | 3 | COMPLETED
我的问题是,当我根据状态(@ tableB)计算时,我的查询会产生具有相同orderid的UPDATED。
这是我的样本查询,与我正在使用的查询相同。
SELECT t.name
COUNT(CASE WHEN tb.task = 1 AND tb.status <> 'COMPLETED' THEN tb.status ELSE NULL END) inprogress,
COUNT(CASE WHEN tb.task = 1 AND tb.status = 'COMPLETED' THEN tb.status ELSE NULL END) completed
FROM tableA ta
LEFT JOIN tableB tb
ON tb.orderid = ta.orderid
LEFT JOIN table t
ON t.jobid = ta.jobid
GROUP BY t.jobid;
我的结果类似
name + inprogress + completed
jobA | 2 | 1
inprogress结果必须只有1,因为它具有相同的orderid。它有两个UPDATED的原因是因为这个表是历史性的。我不知道如何在tableB中获得不同的orderid,因此它只会得到1。
这里的要点是,我可以计算每个工作正在进行,已完成和未开始的总订单。
我希望我的问题很明确。如果您有其他方式,请告诉我。谢谢
答案 0 :(得分:0)
你不能使用Count明显吗?这是一个链接,看到更接近页面底部,它只会指定您指定的唯一字段:w3schools.com/sql/sql_func_count.asp
SELECT t.name COUNT(DISTINCT tb.orderid CASE WHEN tb.task = 1 AND tb.status 'COMPLETED' THEN tb.status ELSE NULL END) inprogress, COUNT(DISTINCT tb.orderid CASE WHEN tb.task = 1 AND tb.status = 'COMPLETED' THEN tb.status ELSE NULL END) completed