2017-06-02 8 views
0

私は20のselect文を実行する以下のクエリを持っています。また、20の結果も表示します。すべての値を合計し、出力として単一の値を取得する必要があります。クエリ以下のSQLクエリの出力から値を追加する方法

SELECT COUNT(*) FROM Tablename WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename1 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename2 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename3 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename4 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename5 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename6 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename7 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename8 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename9 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename10 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename11 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename12 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename13 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename14 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename15 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename16 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename17 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename18 WHERE SERVERID=1 
union 
SELECT COUNT(*) FROM Tablename19 WHERE SERVERID=1; 

は、私はあなたがCTEに組合のあなたのシリーズを配置し、ちょうど合計を取ることができます上記の出力

+0

(your_quias)サブクエリからの選択合計(your_alias)。 your_aliasとしてcount(*)にエイリアスを追加します。 –

答えて

0
SELECT Sum(SumCount) AS TotalCount 
From 
(
SELECT COUNT(1) AS SumCount FROM Tablename WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename1 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename2 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename3 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename4 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename5 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename6 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename7 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename8 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename9 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename10 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename11 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename12 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename13 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename14 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename15 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename16 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename17 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename18 WHERE SERVERID=1 
union 
SELECT COUNT(1) FROM Tablename19 WHERE SERVERID=1 
) 
Dt; 
1

から得るすべての値を追加するためのクエリを提供してください:

WITH cte AS (
    SELECT COUNT(*) AS total FROM Tablename WHERE SERVERID = 1 
    UNION ALL 
    SELECT COUNT(*) FROM Tablename1 WHERE SERVERID = 1 
    UNION ALL 
    ... 
) 
SELECT SUM(total) AS grand_total 
FROM cte 

もう1つの方法は、すべてのテーブルから和集合を取り除き、レコードの数を数えることです。しかし、これは、上記のクエリとは別に、各テーブルを別々に数えるより多くのメモリを使用する可能性があります。

+1

おそらく 'UNION ALL'でしょうか。私はOPがちょうど質問でUNIONを使用したことを知っていますが、20のテーブルすべてに1つのレコードがあれば、結果は1になるとは思われません。 – GarethD

+1

@GarethD Good point。レッスンはOPを盲目的にコピーすることについて学びました。 –

0

これを試してみてください、

  SELECT T1+T2+T3+T4+T5+T6+T7+T8+T9+T10+T11+T12+T13+T14+T15+T16+T17+T18+T19+T20 
      AS TotalCount from 
      (
      SELECT 
      (SELECT COUNT(*) FROM Tablename WHERE SERVERID=1) as T1, 
      (SELECT COUNT(*) FROM Tablename1 WHERE SERVERID=1) as T2, 
      (SELECT COUNT(*) FROM Tablename2 WHERE SERVERID=1) as T3, 
      (SELECT COUNT(*) FROM Tablename3 WHERE SERVERID=1) as T4, 
      (SELECT COUNT(*) FROM Tablename4 WHERE SERVERID=1) as T5, 
      (SELECT COUNT(*) FROM Tablename5 WHERE SERVERID=1) as T6, 
      (SELECT COUNT(*) FROM Tablename6 WHERE SERVERID=1) as T7, 
      (SELECT COUNT(*) FROM Tablename7 WHERE SERVERID=1) as T8, 
      (SELECT COUNT(*) FROM Tablename8 WHERE SERVERID=1) as T9, 
      (SELECT COUNT(*) FROM Tablename9 WHERE SERVERID=1) as T10, 
      (SELECT COUNT(*) FROM Tablename10 WHERE SERVERID=1) as T11, 
      (SELECT COUNT(*) FROM Tablename11 WHERE SERVERID=1) as T12, 
      (SELECT COUNT(*) FROM Tablename12 WHERE SERVERID=1) as T13, 
      (SELECT COUNT(*) FROM Tablename13 WHERE SERVERID=1) as T14, 
      (SELECT COUNT(*) FROM Tablename14 WHERE SERVERID=1) as T15, 
      (SELECT COUNT(*) FROM Tablename15 WHERE SERVERID=1) as T16, 
      (SELECT COUNT(*) FROM Tablename16 WHERE SERVERID=1) as T17, 
      (SELECT COUNT(*) FROM Tablename17 WHERE SERVERID=1) as T18, 
      (SELECT COUNT(*) FROM Tablename18 WHERE SERVERID=1) as T19, 
      (SELECT COUNT(*) FROM Tablename19 WHERE SERVERID=1) as T20 
      ) u 
+0

こんにちは、テーブルの1000がある場合は、T1、T2として..........のコードを書くことができますか? –

0

ダイナミックSQLを使用して、あなたは「テーブル名」のような名前のすべてのテーブルのレコード数を見つけることができます。以下のコードを参照してください。

IF OBJECT_ID('Tempdb..#TableName') IS NOT NULL 
Drop table #TableName 

IF OBJECT_ID('Tempdb..#TableQuery') IS NOT NULL 
Drop table #TableQuery 

CREATE TABLE #TableQuery (TableQuery VARCHAR(max)) 

CREATE TABLE #TableName (
    Id INT IDENTITY 
    ,TableName VARCHAR(200) 
    ) 

INSERT INTO #TableName (TableName) 
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
AND TABLE_NAME Like '%Tablename%' 
ORDER BY 1 

DECLARE @MinID INT,@MaxId INT,@Sql nvarchar(max),@TableNAme varchar(100),@Sql2 nvarchar(max) 
SELECT @MinID=Min(Id),@MaxId=Max(Id) from #TableName 
WHile (@MinID <[email protected]) 
Begin 
Select @TableNAme=TableName From #TableName Where [email protected] 
SET @Sql=' 
       SELECT COUNT(1) As SUmTotal From '[email protected] +' WHERE SERVERID=1 Union all' 

SET @[email protected]+1 

INSERT INTO #TableQuery 
SELECT @Sql 
END 
SELECT @Sql2=REPLACE(Replace(Query,'&#x0D;',''),',','') FRom 
(
SELECT DISTINCT STUFF((SELECT ', ' + CAST(LTRIM(RTRIM(TableQuery)) AS VARCHAR(100)) FROM #TableQuery 
For XML PATH('')),1,1,'') AS Query FROM #TableQuery 
)Dt 
SELECT @Sql2=SUbSTRING(@Sql2,1,Len(@Sql2)-LEN('Union all')) 
SET @Sql2='SELECT SUM(SUmTotal) AS TotalCount From ('[email protected]+ ') AS Dt' 
SELECT @Sql2 

Exec(@Sql2) 
関連する問題