首页 > 解决方案 > 将列名映射到行

问题描述

我想知道如何将列更改为行,将行更改为列。这是我正在努力实现的目标。

在此处输入图像描述

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

标签: sql-server

解决方案


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

但是,我假设您需要动态列,因此动态 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

推荐阅读