2017-11-02 15 views
0

SQL 쿼리에 다른 열과 동일한 정보가 포함되어 있지만 필터링 된 추가 열을 추가하는 데 어려움이 있습니다. 내가 조금 예제를주고 설명합니다 : 이전과 동일한 정보를 포함하고 있지만 더 많은 정보가 포함 된 SQL 쿼리에 열을 추가합니다.

SELECT 
    aMain.MaintGroupName, 
    CCALARMS = (SELECT COUNT(ALARMIDKEY) --subquery begins 
       FROM REPORTER.REPORTER_STATUS 
       WHERE 
        (MAINTMODECRONTAB != 'Y' 
        AND SUPPRESSESCL < 4 
        AND SPMAUTO != 1 
        AND ORIGINALSEVERITY > 0) 
        AND ((AIWAVER = 3 AND EVENTACTOR = 1) 
          OR 
          ((AIWAVER < 3 OR AIWAVER IS NULL) 
          AND ((CONTROLCENTREVIEW = 1 
           AND ORIGINALSEVERITY = 5) 
           OR (CONTROLCENTREVIEW = 2) 
           OR (ALERTGROUP = 'CHECKLIST') 
           ) 
         ) 
         ) 
       ), --subquery ends 
    COUNT(rSTA.ALARMIDKEY) -- same column as previous, but with no conditions 
FROM 
    REPORTER.reporter.REPORTER_STATUS rSTA 
INNER JOIN 
    AIWA2.dbo.MaintGroup aMain ON aMain.MaintGroupId = rSTA.ALARMOWNERID 
GROUP BY 
    aMain.MaintGroupName 

내가이 나에게 그룹 이름을 얻으려면을 알람 그룹 이름으로 어떤 조건 및 그룹의 모든없는 특수 조건, 같은 경보와 (나에게 특정 알람 및 모든 알람을 보여 모든 그룹에 대해). 이 쿼리는 나에게 그룹 이름이 & 인 모든 알람을 올바르게 그룹화했지만 그룹화되지 않은 모든 그룹에 대해 "CCALARMS"가 계산 된 것으로 표시됩니다. 하위 쿼리의이 개수가 쿼리에서 그룹화되도록 조건을 추가해야합니까? 어쩌면 rSTA.ALARMIDKEY = CCALARM.ALARMIDKEY 같은 것이 추가 조인에 필요합니까?

이제 모든 그룹에 대해 볼 수 있듯이 CCALARMS가 계산됩니다. 어떻게 배포해야하는지 궁금합니다. ALARM

내가 원하는 것을 분명히하기를 희망한다. 그렇지 않다면, 내가 더 자세한 정보를 주겠다. 미리 감사드립니다!

+0

을 테스트하지. – Robbac

답변

0

조건부 집계 :

SELECT 
    aMain.MaintGroupName, 
    CCALARMS = COUNT(
       CASE WHEN      
        (MAINTMODECRONTAB != 'Y' 
        AND SUPPRESSESCL < 4 
        AND SPMAUTO != 1 
        AND ORIGINALSEVERITY > 0) 
        AND ((AIWAVER = 3 AND EVENTACTOR = 1) 
          OR 
          ((AIWAVER < 3 OR AIWAVER IS NULL) 
          AND ((CONTROLCENTREVIEW = 1 
           AND ORIGINALSEVERITY = 5) 
           OR (CONTROLCENTREVIEW = 2) 
           OR (ALERTGROUP = 'CHECKLIST') 
           ) 
         ) 
         ) 
       THEN rSTA.ALARMIDKEY END), 
    COUNT(rSTA.ALARMIDKEY) -- same column as previous, but with no conditions 
FROM 
    REPORTER.reporter.REPORTER_STATUS rSTA 
INNER JOIN 
    AIWA2.dbo.MaintGroup aMain ON aMain.MaintGroupId = rSTA.ALARMOWNERID 
GROUP BY 
    aMain.MaintGroupName 

확인하시기 바랍니다 괄호는, 우리는 마이크로 소프트 SQL 서버를 사용하고

+0

흠 음, 10 분이 걸리더라도 일종의 출력을 제공하는 것 같습니다. 쿼리를보다 빠르게 실행하도록 최적화하는 방법에 대해 알고 있습니까? 조건이나 많은 데이터 때문에 시간이 걸리는 지 궁금합니다. – Robbac

+0

SELECT 목록에있는 표현식 (서브 쿼리를 포함하지 않는다면)은 실행 계획에 거의 영향을 미치지 않습니다. SQL Server Studio는 모든 인덱스를 만들거나 수정하기 위해 조언합니까? – Serg

+0

아니, 안타깝게도 제안이 없습니다 .. – Robbac