I got a help from some one to compose below sql but full script is not written by me. so i have bit of confusion how the below sql is working ?
CREATE Proc USP_GetValuationValue            
(            
   @Ticker VARCHAR(10),            
   @ClientCode VARCHAR(10),            
   @GroupName VARCHAR(10)            
)            
AS     
DECLARE @SPID VARCHAR(MAX), --Is this even used now?  
        @SQL nvarchar(MAX),            
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);            
SELECT @SPID=CAST(@@SPID AS VARCHAR);      
                       
    SET @SQL = N'SELECT * FROM (SELECT  min(id) ID,f.ticker,f.ClientCode,f.GroupName,f.RecOrder,' + STUFF((SELECT N',' + @CRLF + N'       ' +            
                N'MAX(CASE FieldName WHEN ' + QUOTENAME(FieldName,'''') + N' THEN FieldValue END) AS ' + QUOTENAME(FieldName)            
        FROM tblValuationSubGroup g              
        WHERE ticker=@Ticker AND ClientCode=@ClientCode AND GroupName=@GroupName            
        GROUP BY FieldName            
        ORDER BY MIN(FieldOrder)            
        FOR XML PATH(''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,10,N'') + @CRLF +            
    N'FROM (select * from tblValuationFieldValue' + @CRLF +            
    N'WHERE Ticker = @Ticker AND ClientCode = @ClientCode AND GroupName= @GroupName) f' + @CRLF +            
    N'GROUP BY f.ticker,f.ClientCode,f.GroupName,f.RecOrder) X' + @CRLF +  
    N'ORDER BY Broker;';             
                     
PRINT @SQL; 
Below sql is generated after executing above dynamic sql
SELECT * FROM (SELECT  min(id) ID,f.ticker,f.ClientCode,f.GroupName,f.RecOrder,
       MAX(CASE FieldName WHEN 'Last Update' THEN FieldValue END) AS [Last Update],
       MAX(CASE FieldName WHEN 'Broker' THEN FieldValue END) AS [Broker],
       MAX(CASE FieldName WHEN 'Rating' THEN FieldValue END) AS [Rating],
       MAX(CASE FieldName WHEN 'Equivalent Rating' THEN FieldValue END) AS [Equivalent Rating],
       MAX(CASE FieldName WHEN 'Target Price' THEN FieldValue END) AS [Target Price]
FROM (select * from tblValuationFieldValue
WHERE Ticker = @Ticker AND ClientCode = @ClientCode AND GroupName= @GroupName) f
GROUP BY f.ticker,f.ClientCode,f.GroupName,f.RecOrder) X
ORDER BY Broker;
This part is not clear why used in above sql? FOR XML PATH(''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,10,N'')
why FOR XML PATH() has been used here ? i always use FOR XML PATH() to generate xml with data from table.
please help me to understand first dynamic sql like how it is working.
Thanks
 
     
     
    