2011-02-08 70 views
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.

这里的主要问题是,我可以统计正在进行,已完成和未开始每个作业的总订单。

我希望我的问题很清楚。如果您有其他方法,请告诉我。谢谢

+0

你不能使用计数不同?这里有一个链接,看到更接近页面底部,它只会显示您指定的唯一字段:http://www.w3schools.com/sql/sql_func_count.asp – Node17 2011-02-08 09:20:02

+0

我已经考虑过了。但我不知道如何用我现在的COUNT(CASE ......)来申请)如果它会像这样COUNT(DISTINCT(???下一步要做什么,我仍然可以使用CASE或者在哪里应该把DISTINCT放在我的查询中。谢谢 – ace 2011-02-08 09:26:44

回答

0

你不能使用计数不同?这里有一个链接,看到更接近页面的底部,它只会独特的领域指定: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