| 
                
                    | 
                            
                                | Author | Topic |  
                                    | sql_chaserStarting Member
 
 
                                        33 Posts | 
                                            
                                            |  Posted - 2015-04-13 : 15:37:56 
 |  
                                            | [code]Create table tbl_Emp_Log( As_Of_Dt Int,Load_Dt date, Emp_Id varchar(50),Log_Seg Int,Work_Code varchar(10),Enter_Date int,Enter_Time int,Work_Assigned varchar(100),Completion_Date int)[/code][code]insert into tbl_Emp_Logselect 20150410,'2015-04-10','6A23419',89,'CODE1',20140822,825,'John',20140822 UNION ALLselect 20150410,'2015-04-10','6A23419',107,'CODE10',20140612,1630,'Sam',20140822 UNION ALLselect 20150410,'2015-04-10','6A23419',90,'CODE2',20140822,825,'Aien',20140822 select 20150410,'2015-04-10','9DF679',67,'CODE8',20140823,625,'MKJ',20140826 UNION ALLselect 20150410,'2015-04-10','9DF679',34,'CODE10',20140617,1530,'Lon',20140826 UNION ALLselect 20150410,'2015-04-10','9DF679',123,'CODE12',20140829,425,'Dacy',20140826 [/code]------------------------------------------------------------------------Need some help to dynamically pivot few columns based on the Emp_Id and Work_Code.The view should be based on the Emp_Id and Work_Code as the result should be As_Of_Dt,Load_Dt,Emp_Id,CODE1_Log_Seq,CODE1_Enter_Date,CODE1_Enter_Time,CODE1_Work_Assigned,CODE1_Completion_Date,CODE10_Enter_Date,CODE10_Enter_Time,CODE10_Work_Assigned,CODE10_Completion_Date,CODE2_Enter_Date,CODE2_Enter_Time,CODE2_Work_Assigned,CODE2_Completion_Date,The same applies to the next emp_id "9DF679".The code can be added more.. |  |  
                                    | sql_chaserStarting Member
 
 
                                    33 Posts | 
                                        
                                          |  Posted - 2015-04-13 : 18:57:36 
 |  
                                          | The below query works but is failing when Work_Assigned field is turned...It fails at the Max value conversionConversion failed when converting the varchar value 'John' to data type int.DECLARE @cols AS NVARCHAR(MAX),    @query  AS NVARCHAR(MAX)select @cols = STUFF((SELECT ',' + QUOTENAME(Work_Code + col)                     from tbl_Emp_Log t                    cross apply                    (                        select 'Log_Seg', 1 union all                        select 'Enter_Date', 2 Union all                        select 'Enter_Time',3 union all                        select 'Work_Assigned',4 union all                        select 'Completion_Date',5                     ) c (col, so)                    group by col, so,Work_Code                    order by col, so,Work_Code            FOR XML PATH(''), TYPE            ).value('.', 'NVARCHAR(MAX)')         ,1,1,'')print  @cols      set @query = 'SELECT Emp_Id,' + @cols + '             from             (                select Emp_Id,                     col = Work_Code + convert(varchar(100),col),                     value                from tbl_Emp_Log t                    cross apply                    (                        select ''Log_Seg'', Log_Seg union all                        select ''Enter_Date'', Enter_Date Union all                        select ''Enter_Time'', Enter_Time union all                        --select ''Work_Assigned'', Work_Assigned union all                        select ''Completion_Date'', Completion_Date                     ) c (col, value)            ) x            pivot             (                max(value)                for col in (' + @cols + ')            ) p 'execute(@query) |  
                                          |  |  |  
                                    | stepsonAged Yak Warrior
 
 
                                    545 Posts | 
                                        
                                          |  Posted - 2015-04-14 : 01:53:38 
 |  
                                          | Your problem is related to that Union ALL.Try to cast to varchar cross apply	(		select ''Log_Seg'', CAST(Log_Seg AS VARCHAR(100)) union all		select ''Enter_Date'', CAST(Enter_Date AS VARCHAR(100)) Union all		select ''Enter_Time'', CAST(Enter_Time AS VARCHAR(100)) union all		select ''Work_Assigned'', Work_Assigned union all		select ''Completion_Date'', CAST(Completion_Date AS VARCHAR(100))	) c (col, value)) xsabinWeb MCP |  
                                          |  |  |  
                                    | gbrittonMaster Smack Fu Yak Hacker
 
 
                                    2780 Posts | 
                                        
                                          |  Posted - 2015-04-14 : 10:40:53 
 |  
                                          | This worked for me: declare @dyn nvarchar(max);set @dyn = stuff((    select         ',MAX(case when Work_Code = ''' + Work_Code + ''' then Log_Seg end) AS '         + Work_Code + '_Log_Seq'        + ',MAX(case when Work_Code = ''' + Work_Code + ''' then Enter_Date end) AS '      + Work_Code + '_Enter_Date'       + ',MAX(case when Work_Code = ''' + Work_Code + ''' then Enter_Time end) AS '      + Work_Code + '_Enter_Time'       + ',MAX(case when Work_Code = ''' + Work_Code + ''' then Work_Assigned end) AS '   + Work_Code + '_Work_Assigned'       + ',MAX(case when Work_Code = ''' + Work_Code + ''' then Completion_Date end) AS ' + Work_Code + '_Completion_Date'       + ',MAX(case when Work_Code = ''' + Work_Code + ''' then Enter_Date end) AS '      + Work_Code + '_Enter_Date'    from (select distinct Work_Code from tbl_Emp_Log) _    order by Work_Code    for XML path('')),1,1,'')--select @dyndeclare @sql nvarchar(max);set @sql =' SELECT As_Of_Dt,Load_Dt, Emp_Id, ' + @dyn +' FROM tbl_Emp_Log' +' GROUP BY As_Of_Dt,Load_Dt, Emp_Id'select @sqlexec sp_executesql @sql |  
                                          |  |  |  
                                |  |  |  |