2015-07-30 4 views
1

Я результирующий набор из таблицы, таких как следующее изображение:Транспонирование столбцы в строках

enter image description here

возвращается по следующему запросу:

SELECT [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable 

Я хотел бы транспонирование в соответствии это другое изображение:

enter image description here

Я попытался следовать образцам PIVOT, но я не смог достичь результата. Это моя попытка (я не включать все столбцы):

SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9 
FROM 
(
SELECT id, qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p 
PIVOT 
(
    MAX(value) 
    FOR qualifierId IN 
    ([1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289]) 
) AS pvt 

, но не работает, потому что это результат я получаю: enter image description here

где ошибка ?! спасибо, диего

+0

Какую ошибку вы получаете? – Mihai

+0

привет Mihai, я не получаю sql-ошибку, но другой результат, как вы можете видеть из 3-го изображения в моем вопросе (только что отредактировано); значения не находятся в одной строке. – bitdiego

ответ

0

Удалите id столбец из вашего подзапроса, так как даже вы не используете его в пункте PIVOT и в конечном SELECT заявлении она используется для группировки:

SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9 
FROM 
(
SELECT qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p 
PIVOT 
(
    MAX(value) 
    FOR qualifierId IN 
    ([1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289]) 
) AS pvt 

Объяснение:

Допустим, у меня есть следующая таблица:

DECLARE @DataSource TABLE 
(
    [RecordID] TINYINT 
    ,[Team] VARCHAR(12) 
    ,[MatchID] TINYINT 
    ,[Score] TINYINT 
); 

INSERT INTO @DataSource ([RecordID], [Team], [MatchID], [Score]) 
VALUES (1, 'A', 1, 50) 
     ,(2, 'A', 2, 10) 
     ,(3, 'B', 1, 20) 
     ,(4, 'B', 2, 40) 
     ,(5, 'B', 3, 70); 

enter image description here

, и я хочу сделать PIVOT на [MatchID] колонку и написать следующий запрос:

SELECT * 
FROM 
(
    SELECT * 
    FROM @DataSource 
) DS 
PIVOT 
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3]) 
) PVT; 

Я получаю следующий результат (по аналогии, как вы):

enter image description here

Эта проблема «вызвана» столбцом RecordID, поскольку она уникальна, и результаты группируются по Это. Таким образом, чтобы решить проблему, нужно удалить его:

SELECT * 
FROM 
(
    SELECT [Team] 
      ,[MatchID] 
      ,[Score] 
    FROM @DataSource 
) DS 
PIVOT 
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3]) 
) PVT; 

и все работает отлично:

enter image description here

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