Sql server 如何在多个列上使用SQL Server Pivot

Sql server 如何在多个列上使用SQL Server Pivot,sql-server,pivot,unpivot,Sql Server,Pivot,Unpivot,我使用SQL Server Pivot语句尝试转换以下表格格式/数据。尽管谷歌搜索了过去24小时,但还是无法获得它 这是我在表格中的内容: --------- ------ ------- ------- ------- Product Brand Region1 Region2 Region3 --------- ------ ------- ------- ------- Product A

我使用SQL Server Pivot语句尝试转换以下表格格式/数据。尽管谷歌搜索了过去24小时,但还是无法获得它

这是我在表格中的内容:

--------- ------ ------- ------- ------- Product Brand Region1 Region2 Region3 --------- ------ ------- ------- ------- Product A BrandX 120 1005 7500 Product B BrandY 522 422 566 Product C BrandX 455 255 655 --------- ------ ------- ------- ------- 产品品牌区域1区域2区域3 --------- ------ ------- ------- ------- 产品A品牌X 120 1005 7500 产品B白兰地522 422 566 产品C品牌X 455 255 655 这是我希望达到的结果:

--------- ------ ------- ------- Product Product A Product B Product C --------- ------ ------- ------- Brand BrandX BrandY BrandX Region1 120 522 455 Region2 1005 422 255 Region3 7500 566 655 --------- ------ ------- ------- 产品A产品B产品C --------- ------ ------- ------- 白兰地白兰地白兰地 地区1 120 522 455 地区2 1005 422 255 地区3 7500 566 655
感谢您的帮助。

只需在轴内使用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

中的示例相同,但版本略有不同:

;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

Fiddle here

所需输出的第一行是否为标题?如果是这样的话,你能在页眉上做标记吗?