2017-02-01 3 views
0

Я работаю с SQL Server 2012, моя таблица выглядит следующим образом:В SQL Server, как показать значение строк таблицы в столбце?

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

Чтобы получить результат здесь, мне нужен SQL-запрос:

Customer PersonalInfo FinancialInfo CompanyInfo 
--------------------------------------------------------- 
    3  Ok    Pending   NeedUpdate 
+0

Просто вам нужно «Pivot» или запрос, чтобы преобразовать строку в столбец. Это все. –

ответ

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 

выход

Customer PersonalInfo FinancialInfo CompanyInfo 
3    Ok    Pending   NeedUpdate 

или

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) 
+0

есть одна проблема, Pivot in operator, I StatusType не фиксированы, они динамичны – shamim

Смежные вопросы