0
我想计算来自两个以上连接表的数据库中的记录数。排除查询结果中的重复行
例如我有一个这样的表。
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。
这是我的示例查询,与我工作的相同。
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,因为它具有相同的订单ID。它有两个UPDATE的原因是因为这个表是历史。我不知道如何才能在tableB中获得独特的orderid,因此它只会导致为1.
这里的主要问题是,我可以统计正在进行,已完成和未开始每个作业的总订单。
我希望我的问题很清楚。如果您有其他方法,请告诉我。谢谢
你不能使用计数不同?这里有一个链接,看到更接近页面底部,它只会显示您指定的唯一字段:http://www.w3schools.com/sql/sql_func_count.asp – Node17 2011-02-08 09:20:02
我已经考虑过了。但我不知道如何用我现在的COUNT(CASE ......)来申请)如果它会像这样COUNT(DISTINCT(???下一步要做什么,我仍然可以使用CASE或者在哪里应该把DISTINCT放在我的查询中。谢谢 – ace 2011-02-08 09:26:44