2011-02-08 89 views
0

我想统计任务1至3的订单总数。 然后,如果entry1已经计数,我需要检查状态是否正在进行(所有状态都未完成) 。 我需要在这里使用嵌套CASE,我不想将它包含在我的WHERE子句 中,因为我稍后会加入更多表。MySQL查询中的嵌套CASE

这是我的示例表:

ID + orderid + task + status 
1 | 1  | 1  | Completed 
2 | 2  | 1  | Saved 
3 | 3  | 1  | Saved 
4 | 1  | 2  | Completed 
5 | 1  | 3  | Completed 

正如你可以在已ENTRY1总的在建工程为2,完成任务现场看到的是1 当我执行我的查询我得到的结果2当我使用entry1和状态不保存,但我也得到了删除NOT时的结果2。但是当我使用('COMPLETED')时,我得到了正确的结果。那么在我的代码中('SAVED')有什么问题。我希望我没有在我的问题中输入任何内容。

这是我的示例查询:

SELECT 
    COUNT(
     CASE task 
      WHEN 1 THEN task ELSE NULL 
     END 
     AND 
     CASE `status` 
      WHEN NOT UPPER('SAVED') THEN `status` ELSE NULL 
     END 
     ) e1_inprogress 
    FROM tableName; 

现在我只用唯一的任务1,但在我真正的代码,我也需要包括所有任务和COUNT所有状态。 我认为这很简单,也许我错过了什么,然后请纠正我。 如果您有其他方式,请让我们知道。

回答

1

使用此

SELECT 
    COUNT(
     CASE WHEN task = 1 AND Upper(`status`) = 'SAVED' THEN 1 END 
     ) e1_inprogress 
    FROM tableName; 


为什么它不工作?

WHEN NOT UPPER('SAVED') 

NOT UPPER('SAVED')成为NOT (TRUE)变得FALSE,所以你对价值FALSE比较CASE Status

您的查询可能已经

CASE Upper(`Status`) 
WHEN 'SAVED' THEN ... ELSE ... 

(注:交换的THEN和ELSE的代码)

+0

现在我得到它..问题是我的关于不等于我应该用思维< >或!=而不是NOT或<=>。随着你的解释,我会认为这是我接受的答案,而你是代码我会用它代替我的,以缩短我的查询。再次感谢(我应该先研究基本) – ace 2011-02-08 04:44:27