Как использовать функцию pivot в sql server? - PullRequest
0 голосов
/ 22 января 2019

У меня есть такая таблица:

Factory indexcode grade
200         1                95
200         2               100
5000        1                85
5000        3                90

Как я могу получить этот результат?

Factory.       1        2       3      
200           95     100        -
5000          85       -        90

indexcode варьируется от 1 до 6.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Если ваши indexcodes фиксированные (1-6), в этом случае вы можете использовать следующий запрос PIVOT.

SELECT * 
FROM   TABLE_NAME
       PIVOT ( Max(grade) 
             FOR indexcode IN ( [1], [2], [3],[4],[5],[6]) ) pvt

Если ваши значения кода индекса не фиксированы и могут принимать любое значение, в этомВ этом случае вы можете перейти к динамическому повороту, как показано ниже.

DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ', ' + Quotename(indexcode) 
         FROM TABLE_NAME
         FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); 

DECLARE @query AS NVARCHAR(max) = ' SELECT *
                                    FROM  TABLE_NAME
                                           PIVOT ( max(grade) 
                                                 FOR indexcode IN ('+@cols+') ) pvt';
EXECUTE(@query)

DEMO

0 голосов
/ 22 января 2019

Вы можете попробовать ниже -

select factorycode,pv.*
from tablename
pivot
(max(grade) for indexcode in ([1],[2],[3])) as pv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...