SQL Server 2014中用CTE和UNION ALL创建含统计行的销售视图
实现SQL Server 2014中带汇总行的Top5产品视图
我来帮你搞定这个视图的创建,结合你给出的CTE基础片段,我们可以通过以下方式实现需求——既能展示销量Top5的产品,又能添加「其他产品」汇总行和总计行:
完整的视图创建代码
CREATE VIEW vw_Top5ProductsWithTotals AS WITH ProductSales AS ( -- 第一步:计算所有产品的总销售额,并给它们按销售额降序排名 SELECT p.ProductName, SUM(sod.LineTotal) AS TotalAmount, ROW_NUMBER() OVER(ORDER BY SUM(sod.LineTotal) DESC) AS SalesRank FROM [dbo].[Product] p JOIN [dbo].[SalesOrderDetail] sod ON p.ProductID = sod.ProductID GROUP BY p.ProductName ), Top5AndOthers AS ( -- 第二步:区分Top5产品和其他产品,汇总其他产品的总销售额 SELECT CASE WHEN SalesRank <=5 THEN ProductName ELSE '其他产品' END AS ProductName, SUM(TotalAmount) AS TotalAmount FROM ProductSales GROUP BY CASE WHEN SalesRank <=5 THEN ProductName ELSE '其他产品' END ) -- 第三步:合并数据并添加总计行 SELECT ProductName, TotalAmount FROM Top5AndOthers UNION ALL -- 单独计算所有产品的总销售额作为总计行 SELECT '总计' AS ProductName, SUM(TotalAmount) AS TotalAmount FROM ProductSales;
代码细节说明
- ProductSales CTE:先完成所有产品的销售额统计,同时用
ROW_NUMBER()给产品按销售额降序排名,这一步是为了精准筛选出Top5的产品。 - Top5AndOthers CTE:通过
CASE WHEN逻辑,把排名5以外的所有产品统一归为「其他产品」并汇总销售额,同时保留Top5产品的单独数据。 - 最终合并查询:用
UNION ALL把Top5+其他产品的数据和总计行拼接起来,总计行直接从基础统计结果中计算总和,确保数据准确。
查询效果示例
当你执行SELECT * FROM vw_Top5ProductsWithTotals;时,会得到类似这样的结果:
产品A | 12500.00
产品B | 9800.00
产品C | 8200.00
产品D | 7600.00
产品E | 6300.00
其他产品 | 25400.00
总计 | 69800.00
完全符合你要的展示要求哦!
内容的提问来源于stack exchange,提问作者Chouaebou MAFERA
相关产品推荐
相关产品推荐

