我想知道如何将列更改为行,将行更改为列。 这是我要实现的目标的img。
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
答案 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