You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:40:00