Sql server 多次计数(并集)SQL查询的总和结果

Sql server 多次计数(并集)SQL查询的总和结果,sql-server,count,sum,Sql Server,Count,Sum,我正在尝试将联合计数查询的结果添加到一起,以便轻松获得“总计”。我的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 'MAP

我正在尝试将
联合
计数
查询的结果添加到一起,以便轻松获得“总计”。我的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 
我的结果如下所示,我想添加一个包含记录总数的“总计”列

DATASET      RECORDS_IN_ARCHIVE
TB_BOXES     3149
TB_MAPS      856

为您的
联合使用公共表表达式应符合以下技巧:

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;
尽管如此,如果您正在寻找一个单独的结果:

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

为什么想得太多了?

你的意思是为总计添加新行

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');

将该联合体包装为CTE,然后从中选择总数?谢谢Jan,这很有效,给了我记录总数。谢谢你花时间来看。工会是可怕的——从表现上看。利用SQL过滤初始数据集以获得所需的值,并在过滤集上执行所需的聚合以解决所需的逻辑。Group by具有ROLLUP和CUBE。。。感谢Alocyte提供的信息,我将在将来使用ROLLUP和WITH CUBE在一个查询中求和总数,因为这基本上就是我所追求的。再次感谢。
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');