2016-12-16 14 views
0

У меня есть следующая таблица в моей базе данных SQL Server.Как использовать синтаксис PIVOT или UNPIVOT T-SQL для достижения этого результата?

Mkt Property Cat Description Values  Date 
Germany JohnS Ltd SUP RN    150  JUL 16 
Germany JohnS Ltd SUP RN    100  JUL 16 
Germany JohnS Ltd DLX RN    60  JUL 16 
Germany JohnS Ltd DLX REV    80  JUL 16 
Germany JohnS Ltd DLX REV    75  JUL 16 

мне нужен T-SQL запрос, чтобы преобразовать эту таблицу (назовем ее TBLA) и дать мне следующий вывод:

Mkt   Date  Property  Cat  RN  REV 
Germany  JUL 16  JohnS Ltd  SUP  250  0 
Germany  JUL 16  JohnS Ltd  DLX  60 155 

Я предполагаю, что я должен использовать либо PIVOT или UNPIVOT синтаксис для этого, но я смущаюсь с необходимостью агрегировать два значения (RN и REV) в запросе PIVOT (если это правильный способ сделать это!).

ответ

3

Вы должны использовать PIVOT

SELECT Mkt, Date, Property, Cat, RN, REV 
From yourtable 
Pivot (sum([Values]) for Description in ([RN],[REV])) pv 

Учитывая, что число Descriptions статична еще вам нужно использовать Dynamic Pivot

+0

Существует недостающее открывающая скобка в вашем решении после синтаксиса «Pivot». – user3115933

+0

Да, это исправлено. –

0
Using Pivot : 

CREATE TABLE #Details (Mkt VARCHAR(100), Property VARCHAR(100), Cat 
VARCHAR(100), _Description VARCHAR(100), _Values INT,_Date VARCHAR(100)) 

INSERT INTO #Details (Mkt, Property , Cat , _Description ,_Values , 
_Date) 
SELECT 'Germany','JohnS Ltd','SUP','RN',150,'JUL 16' UNION ALL 
SELECT 'Germany','JohnS Ltd','SUP','RN',100,'JUL 16' UNION ALL 
SELECT 'Germany','JohnS Ltd','DLX','RN',60,'JUL 16' UNION ALL 
SELECT 'Germany','JohnS Ltd','DLX','REV',80,'JUL 16' UNION ALL 
SELECT 'Germany','JohnS Ltd','DLX','REV',75,'JUL 16' 

SELECT * 
FROM 
(
    SELECT Mkt, Property , Cat , _Description ,_Values , _Date 
    FROM #Details 
)A 
PIVOT 
(
    SUM(_Values) FOR _Description IN ([RN],[REV]) 
)pvt 
1

ответ ППРР является пятном на. Ниже только в случае, если вам нужно пойти динамический

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(Description) From YourTable For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Mkt], [Date], [Property], [Cat],' + @SQL + ' 
    From YourTable 
Pivot (Sum([Values]) For [Description] in (' + @SQL + ')) p' 
Exec(@SQL); 

Возвращает

Mkt  Date Property Cat REV RN 
Germany JUL 16 JohnS Ltd DLX 155 60 
Germany JUL 16 JohnS Ltd SUP NULL 250