0

I'm working with SQL Server 2012, my table looks like this:

Customer    Status         StatusType
----------------------------------------
  3         Ok             personalInfo
  3         Pending        FinancialInfo
  3         NeedUpdate     CompanyInfo

To get the result here, I need a SQL query:

Customer    PersonalInfo    FinancialInfo   CompanyInfo
---------------------------------------------------------
    3       Ok              Pending         NeedUpdate
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
shamim
  • 6,640
  • 20
  • 85
  • 151

1 Answers1

1
    CREATE TABLE #Table1
    ([Customer] int, [Status] varchar(10), [StatusType] varchar(13))
;

INSERT INTO #Table1
    ([Customer], [Status], [StatusType])
VALUES
    (3, 'Ok', 'personalInfo'),
    (3, 'Pending', 'FinancialInfo'),
    (3, 'NeedUpdate', 'CompanyInfo')      
SELECT * 
    FROM #Table1
    PIVOT ( max([status])
      for [StatusType] in ([PersonalInfo], [FinancialInfo], [CompanyInfo])) AS pvt

output

Customer    PersonalInfo    FinancialInfo   CompanyInfo
3             Ok             Pending         NeedUpdate

or

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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.[StatusType]) 
            FROM #Table1 c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT customer, ' + @cols + ' from 

                #Table1
    PIVOT ( max([status])
      for [StatusType] in ([PersonalInfo], [FinancialInfo], [CompanyInfo])) AS pvt'


exec(@query)
Chanukya
  • 5,833
  • 1
  • 22
  • 36