将列名称映射到行

时间:2019-01-27 01:28:29

标签: sql-server

我想知道如何将列更改为行,将行更改为列。 这是我要实现的目标的img。

enter image description here

USE [master]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Main](
    [RowDate] [datetime] NULL,
    [Name] [varchar](50) NULL,
    [Level_1] [int] NULL,
    [Level_2] [int] NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

目标:

-RowDate将成为不同的列。 -Level_1 Level_2将是不同的行标题

这是我所拥有的,与指南相距甚远,但与我要实现的目标相距甚远。

SELECT  countt, Level_Details
FROM [master].[dbo].[Main]
UNPIVOT (
countt FOR  Level_Details IN (
    Level_1, Level_2
    )
) unpvt

1 个答案:

答案 0 :(得分:0)

您走在正确的道路上...首先取消数据透视,然后再透视

但是,我假设您需要动态列,因此需要动态SQL

示例

Declare @SQL varchar(max) = '
Select *
 From (
        Select Level_Type,RowDate,Value
         From  YourTable 
         Unpivot (Value for Level_Type in ([Level_1],[Level_2]) ) Unpiv
      ) Src
 Pivot (sum(Value) for RowDate in ('+ Stuff((Select Distinct ',' + QuoteName([RowDate]) From Yourtable  Order by 1 For XML Path('')),1,1,'') +')) pvt
'
Exec(@SQL)

返回

Level_Type  2019-01-20  2019-01-21
Level_1     40          20
Level_2     80          30