2017-04-10 1 views
1

내 하위 쿼리 테이블에서 전체 직원 수를 계산하려고합니다. 카운트 결과가 0을 반환하지만 1을 계속 반환한다고 가정합니다.COUNT (DISTINCT()) 거짓 값을 반환합니다.

employee_id와 월 만 함께 반환하려고하면 올바른 반환 일 수는 없지만 계산을 시도 할 때마다 (명료 한), 나는 나의 반환 가치로 1 개를 얻을 것이다. 이것은 또한 CASE 식의 ELSE 절에있는 0을 계산합니다 지금이 나의 SQL

SELECT 

    count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN 
    x.employee_id 
     ELSE 0 END)) as test_may 
FROM(
(
SELECT 

    h.month, 
    h.employee_id, 
    eb.employee_no, 
    ee.company_code, 
    h.amount, 
    h.year, 
    h.trx_type, 
    h.trx_code, 
    v.trx_desc, 
    h.frequency, 
    h.run_sequence 

FROM 
    v_employee h, 
    v_trans v, 
    employee_emp ee, 
    employee eb   
    WHERE 
     (h.year = 2014) AND 
     (h.employee_id = ee.employee_id) AND 
     (ee.employee_id = eb.employee_id) AND 
     (h.employee_no = eb.employee_no) AND 
     (h.trx_code = v.trx_code) AND 
     (h.trx_type = v.trx_type) AND 
     (v.company_code = ee.company_code OR v.company_code is NULL) AND 
     (h.trx_type IN ('S','B','N','O','A','D','L')) 
) 
)x, 
employee_emp ee, 
employee eb 

WHERE 

    (x.employee_id = ee.employee_id) AND 
    (ee.employee_id = eb.employee_id) AND 
    (x.employee_no = eb.employee_no) AND 
    (x.year = 2014) 
+0

MySQL은 SQL Server가 아니므로 – Jens

+0

태그를 삭제했습니다. DISTINCT는 손상되지 않았으며 SQL 언어도 아닙니다. 당신의 데이터는 무엇입니까? 당신은 무엇을 기대했고 무엇을 얻었습니까? 1 행이 반환되면 결과는 1 –

+0

입니다. 결과는 두 번째 쿼리에 따라 달라집니다. 직접 확인하는 것이 좋습니다. –

답변

2

count입니다. DISTINCT을 사용해도 여전히 0의 인스턴스가 계산됩니다.

count (distinct(CASE x.month WHEN 5 THEN NULLIF(x.employee_id, 0) END)) as test_may 
+0

감사합니다. 잘 작동합니다! – gpsrosak

1

귀하의 count이 같은를 반환합니다 NULLIF 당신이이 표현을 단축 할 수

count (distinct(CASE WHEN x.month =5 and x.employee_id <> 0 
        THEN x.employee_id 
       END)) as test_may 

참고 : 계산되지 않습니다 -

그래서 당신은 NULL을 가지고 있다는 ELSE 0를 제거 두 경우 모두 포함됩니다. 두 경우 모두 Count 함수의 값을 제공하고 있기 때문입니다. 이 카운트 중에 & 널값을 건너 0 또는 100로 1인지

count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN 
    x.employee_id 
     ELSE NULL END)) 

카운트

count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN 
    x.employee_id 
     ELSE 0 END)) 

에서

변경은 값을 계산한다. 따라서 Else 조건에서 NULL은 정확한 결과를 제공합니다.

+0

감사합니다. 그것은 완벽하게 작동합니다. 나는 ELSE 0을 간과했다, 고맙다! – gpsrosak

+0

안녕하세요. @gpsrosak –