2012-02-14 4 views
1

나는SQL -이 쉬운 쿼리를 어떻게 단순화합니까?

가 어떻게이 쿼리를 리팩토링 수 SQL 서버 2005을 사용하고 있습니다?

SELECT Total, Installs, Service, tot.ls_chg_dte_ojb 
    FROM (SELECT COUNT(*) [Total], ls_chg_dte_ojb 
     FROM [COMPL_INST_SVC] 
     GROUP BY ls_chg_dte_ojb) tot 

    JOIN (SELECT COUNT(*) [Service], ls_chg_dte_ojb 
     FROM [COMPL_INST_SVC] 
     WHERE job_class_ojb = 'S' 
     GROUP BY ls_chg_dte_ojb) svc on svc.ls_chg_dte_ojb = tot.ls_chg_dte_ojb 

    JOIN (SELECT COUNT(*) [Installs], ls_chg_dte_ojb 
     FROM [COMPL_INST_SVC] 
     WHERE job_class_ojb in ('C', 'R') 
     GROUP BY ls_chg_dte_ojb) ins on ins.ls_chg_dte_ojb = tot.ls_chg_dte_ojb 
+0

는 심지어 맞습니까? 합계에는 왜 job_class_obj = 'S'값만 포함됩니까? –

+1

('서비스') 제 1 내부 선택 ('총')와 두 번째 사이의 가정 차이점은 무엇입니까? 나는 아래 댓글에서 언급 한 바와 같이 – deutschZuid

+1

, 당신은 별칭을 구분하기위한 작은 따옴표를 사용하지 않아야합니다 -이 구문이 사용되지 않습니다. [대괄호], "큰 따옴표"또는 구분 기호 없음을 사용하십시오. –

답변

2

의 라인과 서비스 카운트 따라 뭔가를하려고 노력하지만, 여기 당신이 어떻게 기본적입니다 간단한 방법으로 계산 :

SELECT 
    COUNT(CASE WHEN job_class_ojb = 'S' THEN 1 END) AS [Total], 
    COUNT(CASE WHEN job_class_ojb = 'S' THEN 1 END) AS [Service], 
    COUNT(CASE WHEN job_class_ojb in ('C', 'R') THEN 1 END) AS [Installs] 
FROM 
    [COMPL_INST_SVC] 
+1

는 당신이'SUM'을 의미 생각하지'COUNT' -''COUNT' 단지 행이 아닌 실제 값을 계산하기 때문에이 경우 COUNT'은 각 열에서 같은 값을 반환합니다. 또한 별칭을 구분할 때 작은 따옴표를 사용하면 안됩니다.이 구문은 더 이상 사용되지 않습니다. [대괄호], "큰 따옴표"또는 구분 기호 없음을 사용하십시오. –

+1

는'SUM' 문제가 될 수있는 경우에'NULL'를 반환 할 수 있습니다. 그 이유 때문에'COUNT'를 사용하는 것이 더 낫습니다. –

+0

작은 따옴표는 실제로 사용되지 않습니다. 나는 내 대답을 업데이 트해야합니다. –

2

두 개의 하위 선택 항목이 동일합니다. '서비스'를 무시하고, 그 문제를 해결해야합니다, 그래서 똑같은 일을 계산하는 그것은 총과 같은

SELECT 
SUM(CASE WHEN job_class_ojb = 'S' THEN 1 ELSE 0 END) as Total, 
SUM(CASE WHEN job_class_ojb = 'C' or 
       job_class_ojb = 'R' THEN 1 ELSE 0 END) as Installs 
FROM COMPL_INST_SVC 
1

나는 총계 하위 쿼리가 WHERE job_class_ojb = 'S' 조건을 포함하지 않아야 의심 - 그렇다면, 내가 제안 :

SELECT COUNT(*) Total, 
     SUM(CASE WHEN job_class_ojb = 'S' THEN 1 ELSE 0 END) Service, 
     SUM(CASE WHEN job_class_ojb in ('C','R') THEN 1 ELSE 0 END) Installs, 
     ls_chg_dte_ojb 
FROM COMPL_INST_SVC 
GROUP BY ls_chg_dte_ojb 
+0

'GROUP BY'를 포함하는 유일한 대답은 'COUNT' – CodingIsAwesome

관련 문제