Click here to Skip to main content
15,884,629 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello Everyone,

I have a table which i need to convert to multiple rows columns,

Input Table
SubHeading_Name	      Pointer_Id   JV	Jan	Feb
Preparation & Planning  	1	   JV1	4	2
Preparation & Planning  	2	   JV1	3	3
Preparation & Planning  	3	   JV1	2	2
Preparation & Planning  	4	   JV1	4	1
Preparation & Planning  	1	   JV2	4	2
Preparation & Planning  	2	   JV2	3	3
Preparation & Planning  	3	   JV2	2	2
Preparation & Planning  	4	   JV2	4	1


Expected Output:

	Empty		   |	MonthName    |	     Jan    |      Feb	    |
------------------------------------------------------------------------------
SubHeading_Name		|	Pointer_Id   |	JV1	JV2 |	JV1	JV2 |
------------------------------------------------------------------------------
Preparation & Planning  |	1	     | 	4	4   |	2	2   |
Preparation & Planning  |	2	     |	3	3   |	3	3   |
Preparation & Planning  |	3	     |	2	2   |	2	2   |
Preparation & Planning  |	4	     |	4	4   |	1	1   |


What I have tried:

 WITH Main as (select ts.SubHeading_Name,tp.Pointer_Id,tp.Pointer_Name
from  [actionline].[Tbl_Altitude_Pointer_Master] tp left join [actionline].[Tbl_Altitude_SubHeading_Master] ts
on ts.SubHeading_Id=tp.SubHeading_Id
),
TB1 as(
select Pointer_Id,SUM(Score) Score,LEFT(DATENAME(MONTH,Created_On),3) Mnth,
'JV'+CONVERT(varchar(10),DENSE_RANK() OVER (ORDER BY Created_On)) AS JV from [actionline].[Tbl_Altitude_SoftSkill_ScorePointer]
where SP='ANAWAB'
group by Created_On,Pointer_Id
),
TB2 as(
SELECT Pointer_Id, JV,  
[Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec]
FROM  
(SELECT Pointer_Id,JV,Score,Mnth
    FROM TB1) AS SourceTable  
PIVOT  
(  
SUM(Score)  
FOR Mnth IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec]  )  

) AS PivotTable)
select m.SubHeading_Name,t.* 
from Main m inner join Tb2 t on m.Pointer_Id=t.Pointer_Id
order by Pointer_Id
Posted
Updated 30-May-19 4:02am
Comments
Santosh kumar Pithani 30-May-19 9:39am    
CREATE TABLE #Test ( SubHeading_Name VARCHAR(500),Pointer_Id int,JV VARCHAR(100),JAN INT,FEB INT);
INSERT INTO #Test
VALUES
('Preparation & Planning',1,'JV1',4,2)
,('Preparation & Planning',2,'JV1',3,3)
,('Preparation & Planning',3,'JV1',2,2)
,('Preparation & Planning',4,'JV1',4,1)
,('Preparation & Planning',1,'JV2',4,2)
,('Preparation & Planning',2,'JV2',3,3)
,('Preparation & Planning',3,'JV2',2,2)
,('Preparation & Planning',4,'JV2',4,1)

SELECT
SubHeading_Name,Pointer_Id,
MAX(case WHEN JV='JV1' THEN CAST(JAN AS Varchar(10)) END)+' '+
MAX(case WHEN JV='JV2' THEN CAST(JAN AS Varchar(10)) END) AS JAN,
MAX(case WHEN JV='JV1' THEN CAST(FEB AS Varchar(10)) END)+' '+
MAX(case WHEN JV='JV2' THEN CAST(FEB AS Varchar(10)) END) AS FEB
FROM #test GROUP BY SubHeading_Name,Pointer_Id

1 solution

SQL
CREATE TABLE #Test (SubHeading_Name VARCHAR(500),Pointer_Id int,JV VARCHAR(100),
                    Score int,[Month] Varchar(50)
                   );

INSERT INTO #Test(SubHeading_Name,Pointer_Id,JV,Score,[Month]) 

VALUES
 ('Preparation & Planning',1,'JV1',4,'JAN')
,('Preparation & Planning',2,'JV1',3,'JAN')
,('Preparation & Planning',3,'JV1',2,'JAN')
,('Preparation & Planning',4,'JV1',4,'JAN')
,('Preparation & Planning',1,'JV2',4,'JAN')
,('Preparation & Planning',2,'JV2',3,'JAN')
,('Preparation & Planning',3,'JV2',2,'JAN')
,('Preparation & Planning',4,'JV2',4,'JAN')
,('Preparation & Planning',1,'JV1',2,'FEB')
,('Preparation & Planning',2,'JV1',3,'FEB')
,('Preparation & Planning',3,'JV1',2,'FEB')
,('Preparation & Planning',4,'JV1',1,'FEB')
,('Preparation & Planning',1,'JV2',2,'FEB')
,('Preparation & Planning',2,'JV2',3,'FEB')
,('Preparation & Planning',3,'JV2',2,'FEB')
,('Preparation & Planning',4,'JV2',1,'FEB');

;WITH CTE AS(
SELECT 
    SubHeading_Name,Pointer_Id,[MONTH],
    SUM(case WHEN JV='JV1' THEN SCORE ELSE 0 END) AS  Score1,
    SUM(case WHEN JV='JV2' THEN SCORE ELSE 0 END) AS Score2
FROM #test GROUP BY SubHeading_Name,Pointer_Id,[MONTH]
)

SELECT * FROM (
     SELECT SubHeading_Name
           ,Pointer_Id
           ,[MONTH]
           ,CONCAT(CAST(Score1 AS VARCHAR(5)),' ',CAST(Score2 AS VARCHAR(5))) AS Score
      FROM CTE
               ) AS CTE1 

PIVOT(MAX(score) FOR [MONTH] IN([JAN],[FEB]))AS t1
 
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