2013-06-03 2 views
0

초보자 용의 질문에 사과드립니다. 그러나 이러한 쿼리를 여러 쿼리가 아닌 하나의 데이터 세트에 어떻게 넣을 수 있습니까? 그들은 모두 동일한 테이블에서 꺼내집니다. 또한 볼 수 있듯이 "Open_Time"이 있습니다. 이것은 DATE 형식입니다. Open_date가 지난 60 일 이내에 어떻게 말합니까?SQL이 별도의 쿼리를 결합합니다

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='Crosby' 
AND Severity=4 
AND Open_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='Crosby' 
AND Severity=5 
AND Open_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='Crosby' 
AND Severity=4 
AND Close_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='Crosby' 
AND Severity=4 
AND Close_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='EUC' 
AND Severity=4 
AND Open_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='EUC' 
AND Severity=5 
AND Open_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='EUC' 
AND Severity=4 
AND Close_Time<=60; 

SELECT COUNT(P_NUMBER) 
FROM PROBLEM_REPORT 
WHERE Assignment='EUC' 
AND Severity=4 
AND Close_Time<=60; 
+0

하나의 결과 집합을 사용하려면 공용체를 사용하십시오. 하지만이 SQL을 작성할 수있는 더 나은 방법이있다. – Hiten004

답변

1

이 sql을 사용해보십시오. 이 일을

SELECT COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p1, 
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p2, 
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p3, 
    COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p4, 
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p5, 
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND DATEDIFF(CURDATE(),Open_Time)<=60 THEN P_NUMBER END) as p6, 
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p7, 
    COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND DATEDIFF(CURDATE(),Close_Time)<=60 THEN P_NUMBER END) as p8 
FROM PROBLEM_REPORT 
WHERE Assignment IN('EUC','Crosby') 
AND Severity IN(4,5) 
+0

60 일 이내에 close_time을 포함시킬 수 있습니까? –

+0

<= 60이기 때문에 그것도 포함됩니다. – ankurtr

+0

@JimPetersen 지금 업데이트 된 답변을 참조하십시오. – ankurtr

1

한 가지 방법 :

SELECT 
SUM(CASE WHEN Assignment = 'Crosby' AND Severity=4 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number1 
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=5 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number2 
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=4 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number3 
,SUM(CASE WHEN Assignment = 'Crosby' AND Severity=5 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number4 
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=4 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number5 
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=5 AND Open_Time<=60 THEN 1 ELSE 0 END) AS P_number6 
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=4 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number7 
,SUM(CASE WHEN Assignment = 'EUC' AND Severity=5 AND close_time<=60 THEN 1 ELSE 0 END) AS P_number8 
FROM PROBLEM_REPORT 
0

쿼리에 WHERE 절에만 필터링 된 행을 계산하기 때문에 쿼리가 훨씬 더 빨리가 만들 것입니다.

SELECT COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND Open_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND Open_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 4 AND Close_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'Crosby' AND Severity = 5 AND Close_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND Open_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND Open_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 4 AND Close_Time <= 60 THEN P_NUMBER END), 
     COUNT(CASE WHEN Assignment = 'EUC' AND Severity = 5 AND Close_Time <= 60 THEN P_NUMBER END) 
FROM PROBLEM_REPORT 
WHERE Assignment IN ('Crosby', 'EUC') AND 
     Severity IN (4,5) AND 
     (Open_Time <= 60 OR Close_Time <= 60) 
+0

여기에 60 일 이내에 어떻게 close_time과 Open_time을 구현합니까? –

+0

'close_time'과'Open_time'의 데이터 타입은 무엇입니까? 그리고'60 일 미만 '이란 무엇을 의미합니까? –

+0

날짜입니다. 그리고 지난 60 일 이내에 닫힌 경우를 의미합니다. –

관련 문제