2013-08-30 1 views
0

(링크의 오른쪽에있는) 사용 된 쿼리가이 결과를 생성했습니다 (왼쪽).
http://www.sqlfiddle.com/#!2/f34f1/1mysql datediff에 의해 반환 된 열에 조건이있는 쿼리의 결과 행 수를 얻는 방법

나는 새로운 오전 JasperReports를 MySQL의를 참조하십시오. 내가

  1. 수에 노력하고 아직 참조 된 용의자/5 일 이내에 5 일 이상 걸렸다 고객의
  2. 수를 언급 한 클라이언트의
  3. 카운트가 언급 얻을 클라이언트를 확인했다.

내가 5 일

SELECT COUNT(*) from 
(select p.patient_id, 

(CASE WHEN st.smear_result <> 'NEGATIVE' OR st.gxp_result='MTB+' 
THEN IF(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)))) 

ELSE 
(CASE WHEN st.smear_result='NEGATIVE' OR st.gxp_result='MTB-' 
THEN IF(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)))) 

ELSE 'N/A' end)END) as days_taken, 

IF(r.date_referred IS NULL,'N/A',r.date_referred) date_referred 
from patient as p 
right outer join sputum_test as st on p.patient_id=st.patient_id 
right outer join referral as r on r.patient_id=st.patient_id 

where p.suspected_by is not null and (p.patient_status='SUSPECT' or p.patient_status='CONFIRMED') 

group by p.patient_id 

having days_taken <=5) AS SUBQUERY; 

그리고 5 일 이상 걸렸다 고객의 카운트가 언급하려면 내에서 언급 된 고객의 수를 얻을 수 있어요.

SELECT COUNT(*) from 
(select p.patient_id, 

(CASE WHEN st.smear_result <> 'NEGATIVE' OR st.gxp_result='MTB+' 
THEN IF(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)))) 

ELSE 
(CASE WHEN st.smear_result='NEGATIVE' OR st.gxp_result='MTB-' 
THEN IF(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)))) 

ELSE 'N/A' end)END) as days_taken, 

IF(r.date_referred IS NULL,'N/A',r.date_referred) date_referred 
from patient as p 
right outer join sputum_test as st on p.patient_id=st.patient_id 
right outer join referral as r on r.patient_id=st.patient_id 

where p.suspected_by is not null and (p.patient_status='SUSPECT' or p.patient_status='CONFIRMED') 
group by p.patient_id 
having days_taken > 5) AS SUBQUERY; 

하지만 어떻게 카운트를받을 수 있습니까? 추천 된 용의자/확인 된 클라이언트는 무엇입니까?

내 계획은 결과를 2 열로 얻는 것입니다 :
열 1 : 3 조건 표시 및 열 2 : 옆에있는 행 합계 표시.

iReport 디자이너 디자이너로 솔루션 쿼리를 전달하여 3 가지 조건의 원형 차트를 레이블로 만들고 각 조각의 백분율을 보여주는 개수를 계산합니다. 이 같은

답변

0

뭔가 작업을해야합니다 :

SELECT SUM(days_taken <= 5) AS within_5_days, 
     SUM(days_taken > 5) AS more_than_5, 
     SUM(days_taken IS NULL) as not_yet_referred 
FROM (...) AS subquery 

물론, 부질없는 N/A 원래 하위 쿼리에서와 같이 비라고 고객을위한 NULL을 생산한다.

+0

해결책 'N/A'가 within_5_days에서 계산되고 잘못 계산되었습니다. 하위 쿼리가 'NULL'을 생성하지 않습니다 – user2474410

+0

N/A가 아닌 NULL을 반환하기 위해 하위 쿼리를 변경해야한다고 말했습니다. – Barmar

+0

오, 알았어. 고마워! 그것은 작동합니다 :) – user2474410

관련 문제