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

如何在SSMS(SQL Server)中创建指定格式的视图表?

解决方案:行转列实现目标视图

源表结构与数据

国家销售日期销售编码商品类型销售额
阿尔及利亚06/01/2024ACTUALHat200
阿尔及利亚06/01/2024ACTUALShirt145
阿尔及利亚06/01/2024ACTUALPant150
阿尔及利亚06/01/2024TARGETHat90
阿尔及利亚06/01/2024TARGETShirt500
阿尔及利亚06/01/2024TARGETPant100

期望视图格式

国家销售日期帽子实际销售额帽子目标销售额衬衫实际销售额衬衫目标销售额裤子实际销售额裤子目标销售额
阿尔及利亚06/01/202420090145500150100

实现SQL(创建视图)

假设源表名为SalesData,用条件聚合实现行转列,比JOIN更简洁高效:

CREATE VIEW vw_SummarySales
AS
SELECT
    国家,
    销售日期,
    MAX(CASE WHEN 商品类型 = 'Hat' AND 销售编码 = 'ACTUAL' THEN 销售额 END) AS 帽子实际销售额,
    MAX(CASE WHEN 商品类型 = 'Hat' AND 销售编码 = 'TARGET' THEN 销售额 END) AS 帽子目标销售额,
    MAX(CASE WHEN 商品类型 = 'Shirt' AND 销售编码 = 'ACTUAL' THEN 销售额 END) AS 衬衫实际销售额,
    MAX(CASE WHEN 商品类型 = 'Shirt' AND 销售编码 = 'TARGET' THEN 销售额 END) AS 衬衫目标销售额,
    MAX(CASE WHEN 商品类型 = 'Pant' AND 销售编码 = 'ACTUAL' THEN 销售额 END) AS 裤子实际销售额,
    MAX(CASE WHEN 商品类型 = 'Pant' AND 销售编码 = 'TARGET' THEN 销售额 END) AS 裤子目标销售额
FROM SalesData
GROUP BY 国家, 销售日期;

逻辑说明

  1. 分组:按国家和销售日期分组,确保每一行对应一个国家+日期的汇总数据。
  2. 条件聚合:用CASE WHEN筛选出每个商品类型+销售编码组合的销售额,再用MAX(或SUM,因每个分组下该组合唯一)提取对应数值,无数据时自动返回NULL。

若商品类型或销售编码需动态扩展,可改用动态SQL生成视图,固定类型下上述静态SQL足够稳定。

内容的提问来源于stack exchange,提问作者Arc Angel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:13:32