Share via

Pivot Table

Michael M.M. D'Angelo 176 Reputation points
2022-03-09T04:32:01.303+00:00

Hi All,
Please I have this one row table that looks like the below schema
181246-image.png

/****** Object:  Table [dbo].[LedgerParameters]    Script Date: 09-Mar-22 4:12:24 AM ******/  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
CREATE TABLE [dbo].[LedgerParameters](  
	[NumberPeriodsThis] [smallint] NULL,  
	[PerStartThis01] [date] NULL,  
	[PerStartThis02] [date] NULL,  
	[PerStartThis03] [date] NULL,  
	[PerStartThis04] [date] NULL,  
	[PerStartThis05] [date] NULL,  
	[PerStartThis06] [date] NULL,  
	[PerStartThis07] [date] NULL,  
	[PerStartThis08] [date] NULL,  
	[PerStartThis09] [date] NULL,  
	[PerStartThis10] [date] NULL,  
	[PerStartThis11] [date] NULL,  
	[PerStartThis12] [date] NULL  
) ON [PRIMARY]  
GO  
INSERT [dbo].[LedgerParameters] ([NumberPeriodsThis], [PerStartThis01], [PerStartThis02], [PerStartThis03], [PerStartThis04], [PerStartThis05], [PerStartThis06], [PerStartThis07], [PerStartThis08], [PerStartThis09], [PerStartThis10], [PerStartThis11], [PerStartThis12]) VALUES (12, CAST(N'2022-01-01' AS Date), CAST(N'2022-02-01' AS Date), CAST(N'2022-03-01' AS Date), CAST(N'2022-04-01' AS Date), CAST(N'2022-05-01' AS Date), CAST(N'2022-06-01' AS Date), CAST(N'2022-07-01' AS Date), CAST(N'2022-08-01' AS Date), CAST(N'2022-09-01' AS Date), CAST(N'2022-10-01' AS Date), CAST(N'2022-11-01' AS Date), CAST(N'2022-12-01' AS Date))  
GO  
  

I need a script that can convert the columns into 12 rows in the format below
181245-image.png

Developer technologies | Transact-SQL
Developer technologies | Transact-SQL

A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.

0 comments No comments

Answer accepted by question author

LiHong-MSFT 10,061 Reputation points
2022-03-09T07:47:33.367+00:00

Hi @Michael M.M. D'Angelo
Check this query:

SELECT RIGHT(Column_Nmae,2)+' - '+ CONVERT(VARCHAR,StartDate,103) +' - '+CONVERT(VARCHAR,DATEADD(DAY,-1,DATEADD(MONTH,1,StartDate)),103)+' '+DATENAME(MM,StartDate) AS [Month]  
FROM LedgerParameters   
UNPIVOT(StartDate FOR Column_Nmae IN([PerStartThis01], [PerStartThis02], [PerStartThis03], [PerStartThis04], [PerStartThis05], [PerStartThis06],   
                                     [PerStartThis07], [PerStartThis08], [PerStartThis09], [PerStartThis10], [PerStartThis11], [PerStartThis12]))U  

If you don't want to use UNPIVOT keyword,you could also try Cross Apply like this:

SELECT RIGHT(Column_Name,2)+' - '+ CONVERT(VARCHAR,StartDate,103) +' - '+CONVERT(VARCHAR,DATEADD(DAY,-1,DATEADD(MONTH,1,StartDate)),103)+' '+DATENAME(MM,StartDate) AS [Month]  
FROM #LedgerParameters CROSS APPLY(VALUES([PerStartThis01],'PerStartThis01'), ([PerStartThis02],'PerStartThis02'), ([PerStartThis03],'PerStartThis03'),   
                                         ([PerStartThis04],'PerStartThis04'), ([PerStartThis05],'PerStartThis05'), ([PerStartThis06],'PerStartThis06'),   
										 ([PerStartThis07],'PerStartThis07'), ([PerStartThis08],'PerStartThis08'), ([PerStartThis09],'PerStartThis09'),   
										 ([PerStartThis10],'PerStartThis10'), ([PerStartThis11],'PerStartThis11'), ([PerStartThis12],'PerStartThis12'))C(StartDate,Column_Name)  

Output:
181314-image.png

Was this answer helpful?


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.