【问题标题】:How to use SQL Server Pivot on Multiple columns如何在多列上使用 SQL Server Pivot
【发布时间】:2015-10-04 08:18:37
【问题描述】:

我有试图使用 SQL Server Pivot 语句转置的下表格式/数据。尽管谷歌搜索了过去 24 小时,但无法得到它。

这是我在桌子上的:

--------- ------ ------- -------- -------- 产品品牌 地区1 地区2 地区3 --------- ------ ------- -------- -------- 产品 A BrandX 120 1005 7500 产品 B BrandY 522 422 566 产品 C BrandX 455 255 655

这是我希望达到的结果:

--------- ------ -------- -------- 产品 产品 A 产品 B 产品 C --------- ------ -------- -------- 品牌 品牌X 品牌Y 品牌X 地区1 120 522 455 地区2 1005 422 255 地区 3 7500 566 655

感谢您的帮助。

【问题讨论】:

  • 是您想要的输出标题中的第一行吗?如果是的话,你能标出标题吗?

标签: sql-server pivot unpivot


【解决方案1】:

只需在枢轴内使用 unpivot 并记住将列转换为相同的类型:

SELECT *
FROM 
(
  SELECT *
  FROM 
     (SELECT Product, Brand, 
      convert(varchar(6), Region1) as Region1,
      convert(varchar(6), Region2) as Region2,
      convert(varchar(6), Region3) as Region3
      FROM Table1) t1
  UNPIVOT
     (Data FOR Col IN 
        (Brand, Region1, Region2, Region3)
  )AS unpvt
) P
PIVOT
(
  max (Data)
  FOR Product IN
  ( [Product A], [Product B], [Product C] )
) AS pvt

SQL Fiddle 中的示例

【讨论】:

    【解决方案2】:

    相同,但版本略有不同:

    ;with cte as(select Product, 
                        Brand, 
                        cast(Region1 as varchar(100)) Region1,
                        cast(Region2 as varchar(100)) Region2,             
                        cast(Region3 as varchar(100)) Region3
                 from t)           
    select b as Product, [Product A], [Product B], [Product C]
    from cte
    unpivot(a for b in([Brand],[Region1],[Region2],[Region3]))u
    pivot(max(a) for Product in([Product A],[Product B],[Product C]))p
    

    在这里提琴http://sqlfiddle.com/#!3/c23cfa/3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多