2011-02-08 2 views
0

작업이 1에서 3 인 주문의 총 수를 계산하고 싶습니다. 그런 다음 entry1이 이미 계산 된 경우 상태가 진행 중인지 (완료되지 않은 모든 상태)를 확인해야합니다. . 중첩 된 사례를 사용해야합니다. 여기에 WHERE 절의 에 포함시키지 않으려 고합니다. 나중에 더 많은 테이블을 조인 할 것이기 때문입니다.MySQL 쿼리의 중첩 된 사례

이 내 샘플 테이블 : 당신이 진행중인 2의 총 ENTRY1 및 완료 작업 필드에서 볼 수 있듯이

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

는 1. 내 쿼리를 실행할 때 내가 얻을 결과입니다 2 entry1을 사용할 때 상태가 저장되지 않았지만 NOT을 제거 할 때 2의 결과도 얻습니다. 그러나 내가 ('완료') 사용할 때 올바른 결과를 얻을 수 있습니다. 그렇다면 내 코드에서 (SAVED)의 문제점은 무엇입니까? 나는 내 질문에 실수를하지 않았 으면 좋겠다. 난 그냥 작업에만 1을 사용하지만 내 실제 코드에서 나는 모든 작업 및 COUNT의 모든 상태를 포함하는 것이 필요 지금은

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; 

:

이 내 샘플 쿼리입니다. 나는 이것이 어쩌면 내가 뭔가를 놓친 간단한 것 같아요. 다른 방법이 있으면 알려주십시오. 이

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


작동하지 않은 이유는

답변

1

사용?

WHEN NOT UPPER('SAVED') 

NOT UPPER('SAVED')NOT (TRUE)FALSE하게되고, 그래서 당신은 값 FALSE에 대해 CASE Status을 비교된다.

조회에

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

수 있었다 (NB : 스왑 THEN과 ELSE에 대한 코드)

+0

나는 지금 그것을 얻을 ... 문제는 내가 사용해야 동일하지에 대한 내 생각은 < > 또는! = 대신 NOT 또는 <=>을 입력하십시오. 귀하의 설명으로 나는 이것을 받아 들일 수있는 대답으로 간주 할 것이고, 당신은 코드 대신 내 질문을 단축하기 위해 그것을 사용할 것이다. 다시 한번 감사드립니다. (나는 먼저 기본을 공부해야합니다.) – ace