2017-11-02 8 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 

我々は、Microsoft SQL Serverを使用している

+0

ええと、10分かかっても何らかの出力があるようですが、おそらく正しいものでしょう。クエリーを最適化してより速く実行する方法を知っていますか?条件や多くのデータのために時間がかかるのだろうかと思います。 – Robbac

+0

SELECTリスト内の式(サブクエリを含まない場合)は、実行プランにはほとんど影響しません。任意のインデックスを作成/変更するためのSQL Server Studioのアドバイスはありますか? – Serg

+0

悲しいことに、そこからの提案はありません。 – Robbac

関連する問題