Click here to Skip to main content
15,896,730 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
SQL
create table example(MONTH VARCHAR(MAX),ORDERS VARCHAR(MAX))

INSERT INTO example VALUES('Jan','1');
INSERT INTO example VALUES('Feb','2');
INSERT INTO example VALUES('Mar','3');

SELECT* FROM example
SELECT  'Assign' Assign ,*,'Total' [Total] into #final  from (SELECT * FROM example) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(a,b,c)) AS pvt
select * from #final
DROP table #final


it need to show the month name instead of a,b,c it is a dynamic table so month name will change everytime

What I have tried:

it need to show the month name instead of a,b,c it is a dynamic table so month name will change everytime
Posted
Updated 30-Mar-17 21:33pm

First your in clause of query is wrong. Correct way of doing it is

DECLARE @TBL TABLE
(
MONTH VARCHAR(MAX),
ORDERS VARCHAR(MAX)
)

INSERT INTO @TBL VALUES('Jan','1');
INSERT INTO @TBL VALUES('Feb','2');
INSERT INTO @TBL VALUES('Mar','3');

SELECT  'Assign' Assign ,*,'Total' [Total] 
from 
(
	SELECT * FROM @TBL
) AS A pivot(MAX(ORDERS) FOR[MONTH] IN(Jan,Feb,Mar)) AS pvt

Secondly since columns are dynamic in nature hence a dynamic pivot query is required which is quite simple. Try these links for an idea.

SQL Server dynamic PIVOT query? - Stack Overflow[^]
Dynamic Pivot Query in SQL Server[^]
Dynamic PIVOT in Sql Server | SqlHints.com[^]
 
Share this answer
 
Comments
Karthik_Mahalingam 31-Mar-17 3:14am    
5
CPallini 31-Mar-17 3:58am    
5.
Try below query as columns are coming dynamically

create table #temp
(
MONTH VARCHAR(MAX),
ORDERS VARCHAR(MAX)
)

INSERT INTO #temp VALUES('Jan','1');
INSERT INTO #temp VALUES('Feb','2');
INSERT INTO #temp VALUES('Mar','3');
INSERT INTO #temp VALUES('Feb','7');


DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@cols1 AS NVARCHAR(MAX)

select @cols1=(SELECT ',' + QUOTENAME(MONTH)
from #temp order by orders
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')


select @cols=STUFF(@cols1
,1,1,'' )

set @query = 'SELECT ' + @cols + '
from
(
select MONTH, ORDERS
from #temp
) x
pivot
(
max(ORDERS)
for MONTH in (' + @cols + ')
) p '
print @query

execute(@query)
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900