2017-05-30 23 views
0

私はUNIONCOUNTクエリの結果を合計して '合計'を簡単に取得しようとしています。私のSQLクエリは簡単ですUNION、誰も私に合計を与えるために生成された結果を追加する方法をアドバイスできますか?複数のCOUNT(UNION)SQLクエリの合計結果

SELECT 'BOXES' AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
FROM dbo.VIEW_GLOBAL_SEARCH 
WHERE RECORD_TABLE = 'TB_BOXES' 
GROUP BY RECORD_TABLE 
UNION 
SELECT 'MAPS' AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
FROM dbo.VIEW_GLOBAL_SEARCH 
WHERE RECORD_TABLE = 'MAPS' 
GROUP BY RECORD_TABLE 

私の結果は以下のようになります。合計のレコード数を「TOTAL」列に追加したいと思います。以下のための共通テーブル式を使用して

DATASET  RECORDS_IN_ARCHIVE 
TB_BOXES  3149 
TB_MAPS  856 
+0

その組合をCTEとしてラッピングして合計を選択しますか? – Jan

答えて

0
WITH CTE AS (
SELECT Record_Table, COUNT(Record_Table) Records_In_Archive 
FROM dbo.VIEW_GLOBAL_Search 
WHERE Record_Table IN ('Maps','TB_Boxes') 
GROUP BY Record_Table 
ORDER BY Record_Table 
) 
SELECT ISNULL(Case Record_Table WHEN 'TB_Boxes' THEN 'Boxes' ELSE Record_Table 
END,'Total') Record_Table, 
SUM(Records_In_Archive) Records_In_Archive 
FROM CTE 
GROUP BY Case Record_Table WHEN 'TB_Boxes' THEN 'Boxes' ELSE Record_Table END 
WITH ROLLUP 
ORDER BY Record_Table 

、が、あなたは別の結果を探している場合:

SELECT 'Total', COUNT(Record_Table) 
FROM dbo.VIEW_Global_Search 
WHERE Record_Table IN ('TB_Boxes','Maps') 

なぜoverthinkこの?

+0

組合は恐ろしいほどパフォーマンスが良いです。 SQLを利用して初期データセットをフィルタリングして必要な値を取得し、フィルタリングされたセットで、必要なロジックを解決するために必要な集計を行います。グループbyはWITH ROLLUP、WITH CUBE ...は合計1つのクエリを合計します。 – Alocyte

+0

Alocyteの情報をありがとう - 私は後でROLLUPとWITH CUBEを使用して、基本的には1つのクエリ内の合計を合計することにします。再度、感謝します。 – b0redj0rd

0

あなたUNIONべきトリックへ:

WITH rawdata AS (
    SELECT 'BOXES' AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
    FROM dbo.VIEW_GLOBAL_SEARCH 
    WHERE RECORD_TABLE = 'TB_BOXES' 
    GROUP BY RECORD_TABLE 
UNION 
    SELECT 'MAPS' AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
    FROM dbo.VIEW_GLOBAL_SEARCH 
    WHERE RECORD_TABLE = 'MAPS' 
    GROUP BY RECORD_TABLE 
) SELECT SUM(RECORDS_IN_ARCHIVE) FROM rawdata; 
+0

ありがとう1月、それは働いて、私にレコードの合計数を与えました。見る時間をとってくれてありがとう。 – b0redj0rd

+0

ベストアンサーを受け入れるのは気軽に – Jan

0

あなたは合計のために新しい行を追加することを意味しますか?

SELECT RECORD_TABLE AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
FROM dbo.VIEW_GLOBAL_SEARCH 
WHERE RECORD_TABLE IN ('TB_BOXES', 'MAPS') 
GROUP BY RECORD_TABLE 
UNION ALL 
SELECT 'TOTAL' AS DATASET, 
     COUNT(RECORD_TABLE) AS RECORDS_IN_ARCHIVE 
FROM dbo.VIEW_GLOBAL_SEARCH 
WHERE RECORD_TABLE IN ('TB_BOXES', 'MAPS'); 
関連する問題