将 SUM 添加到 SQL 服务器查询结果
Add SUM to SQL Server Query Results
我需要在 SQL 服务器查询结果的底部添加一个 SUM
函数。
这是我的查询:
SELECT
STATE, COUNTY, NAME, STNAME, CENSUS2010POP, ESTIMATESBASE2010
FROM
[CensusData].[dbo].[SUB-EST2014_ALL]
WHERE
(SUMLEV = '50')
AND (CENSUS2010POP > 100000)
AND (CENSUS2010POP < 200000)
阅读了几篇关于此的帖子和博客后,我将查询更新为以下内容:
SELECT
STATE, COUNTY, NAME = ISNULL(NAME, 'Total'), STNAME,
CENSUS2010POP = SUM(CENSUS2010POP), ESTIMATESBASE2010
FROM
[CensusData].[dbo].[SUB-EST2014_ALL]
WHERE
(SUMLEV = '50')
AND (CENSUS2010POP > 100000)
AND (CENSUS2010POP < 200000)
GROUP BY
ROLLUP(NAME)
然而,当我尝试 运行 修改后的查询时,出现错误:
Column 'CensusData.dbo.SUB-EST2014_ALL.STATE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我从未在 SQL 服务器中使用过 SUM
函数,所以我不确定这个错误是什么意思,也不知道如何修复它。
有人可以指出我的错误并告诉我如何解决吗?我是 运行宁 SQL Server 2014.
尽管您可能可以让汇总工作,但也许这是我认为您想要的最简单的解决方法:
SELECT STATE, COUNTY, NAME, STNAME, CENSUS2010POP, ESTIMATESBASE2010, '' AS Aggregated
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
UNION ALL
SELECT NULL, NULL, NULL, NULL, SUM(CENSUS2010POP), SUM(ESTIMATESBASE2010), 'Total'
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
ORDER BY Aggregated
从技术上讲,额外的行可能不会出现在底部,所以我不得不添加一个额外的列来强制排序。
这是使用分组集的方法。由于您似乎只想要总计,我不相信 rollup
会起作用,除非您将四个值连接到一个计算列中。
SELECT
STATE, COUNTY, NAME, STNAME,
sum(CENSUS2010POP) as CENSUS2010POP,
sum(ESTIMATESBASE2010) as ESTIMATESBASE2010)
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
GROUP BY GROUPING SETS ((STATE, COUNTY, NAME, STNAME), ())
ORDER BY GROUPING(STATE)
我需要在 SQL 服务器查询结果的底部添加一个 SUM
函数。
这是我的查询:
SELECT
STATE, COUNTY, NAME, STNAME, CENSUS2010POP, ESTIMATESBASE2010
FROM
[CensusData].[dbo].[SUB-EST2014_ALL]
WHERE
(SUMLEV = '50')
AND (CENSUS2010POP > 100000)
AND (CENSUS2010POP < 200000)
阅读了几篇关于此的帖子和博客后,我将查询更新为以下内容:
SELECT
STATE, COUNTY, NAME = ISNULL(NAME, 'Total'), STNAME,
CENSUS2010POP = SUM(CENSUS2010POP), ESTIMATESBASE2010
FROM
[CensusData].[dbo].[SUB-EST2014_ALL]
WHERE
(SUMLEV = '50')
AND (CENSUS2010POP > 100000)
AND (CENSUS2010POP < 200000)
GROUP BY
ROLLUP(NAME)
然而,当我尝试 运行 修改后的查询时,出现错误:
Column 'CensusData.dbo.SUB-EST2014_ALL.STATE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我从未在 SQL 服务器中使用过 SUM
函数,所以我不确定这个错误是什么意思,也不知道如何修复它。
有人可以指出我的错误并告诉我如何解决吗?我是 运行宁 SQL Server 2014.
尽管您可能可以让汇总工作,但也许这是我认为您想要的最简单的解决方法:
SELECT STATE, COUNTY, NAME, STNAME, CENSUS2010POP, ESTIMATESBASE2010, '' AS Aggregated
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
UNION ALL
SELECT NULL, NULL, NULL, NULL, SUM(CENSUS2010POP), SUM(ESTIMATESBASE2010), 'Total'
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
ORDER BY Aggregated
从技术上讲,额外的行可能不会出现在底部,所以我不得不添加一个额外的列来强制排序。
这是使用分组集的方法。由于您似乎只想要总计,我不相信 rollup
会起作用,除非您将四个值连接到一个计算列中。
SELECT
STATE, COUNTY, NAME, STNAME,
sum(CENSUS2010POP) as CENSUS2010POP,
sum(ESTIMATESBASE2010) as ESTIMATESBASE2010)
FROM [CensusData].[dbo].[SUB-EST2014_ALL]
WHERE (SUMLEV = '50') AND (CENSUS2010POP > 100000) AND (CENSUS2010POP < 200000)
GROUP BY GROUPING SETS ((STATE, COUNTY, NAME, STNAME), ())
ORDER BY GROUPING(STATE)