SQL中为查询结果的Quantity列添加汇总行的正确语法咨询
解决方案
你的ROLLUP语法有误,下面提供两种可行的实现方式:
方法1:使用ROLLUP生成汇总行(推荐)
ROLLUP需要配合GROUP BY和聚合函数使用,正确写法是将ROLLUP放在GROUP BY后,同时通过GROUPING()函数识别汇总行:
SELECT CASE WHEN GROUPING(Item) = 1 THEN '总计' ELSE Item END AS Item, SUM(Quantity) AS Quantity FROM aTable WHERE Item LIKE '%ABC%' GROUP BY ROLLUP(Item)
GROUPING(Item)返回1时,表示当前行是ROLLUP生成的总计行,我们可以将其Item列显示为'总计';返回0则是普通分组行。- 这个方法适用于支持SQL:2008标准的数据库(如SQL Server、MySQL 8.0+、PostgreSQL等)。
方法2:使用UNION ALL拼接明细与总计
如果数据库不支持ROLLUP,或者你更倾向于直观的拼接方式,可以分别查询明细和总计,再用UNION ALL合并:
-- 明细数据 SELECT Item, Quantity FROM aTable WHERE Item LIKE '%ABC%' UNION ALL -- 总计行 SELECT '总计' AS Item, SUM(Quantity) AS Quantity FROM aTable WHERE Item LIKE '%ABC%'
注意:两个查询的列数、数据类型必须完全匹配。如果Item是数值类型,可将'总计'替换为NULL或其他兼容值。
废弃语法(不推荐)
SQL Server中曾支持COMPUTE语法生成汇总,但该语法已被废弃,不建议使用:
SELECT Item, Quantity FROM aTable WHERE Item LIKE '%ABC%' COMPUTE SUM(Quantity)
内容的提问来源于stack exchange,提问作者WantaghMomma
相关产品推荐
相关产品推荐

