Преобразование строки в столбец без агрегатной функции в SQL - PullRequest
0 голосов
/ 16 октября 2018

Народ, ниже приведен пример таблицы, которая у меня есть.

Текущая таблица

PropertyAttributeValueID PropertyTypeID PropertyAttributeName PropertyAttributeValue
1000                     3216           Mileage               20.4
1000                     3216           Engine                DIESEL
1000                     3216           Manufacturer          HONDA
1000                     3216           Seat_Capacity         5
1001                     3216           Mileage               19.2
1001                     3216           Engine                PETROL
1001                     3216           Manufacturer          SUZUKI
1001                     3216           Seat_Capacity         4
1002                     3216           Mileage               18.0
1002                     3216           Engine                DIESEL
1002                     3216           Manufacturer          SUZUKI
1002                     3216           Seat_Capacity         4
1003                     3216           Mileage               16.3
1003                     3216           Engine                PETROL
1003                     3216           Manufacturer          HYUNDAI
1003                     3216           Seat_Capacity         5

Мне нужно создать эту таблицуиз приведенного выше

Желаемая таблица

PropertyAttributeValueID Mileage Engine Manufacturer Seat_Capacity
1000                     20.4    DIESEL HONDA        5
1001                     19.2    PETROL SUZUKI       4
1002                     18.0    DIESEL SUZUKI       4
1003                     16.3    PETROL HYUNDAI      5

Я думал об использовании pivot, но, как вы можете видеть, агрегатная функция не нужнаКак мне это создать?

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете использовать внутреннее объединение

select a.PropertyAttributeValueID 
        , a.PropertyAttributeValue  as Mileage
        , b.PropertyAttributeValue  as Engine
        , c.PropertyAttributeValue  as Manufacturer       
        , d.PropertyAttributeValue  as Seat_Capacity          
from my_table a 
inner join my_table b on a.PropertyAttributeValueID = b.PropertyAttributeValueID 
        and a.PropertyAttributeName='Mileage'
            and b.PropertyAttributeName = 'Engine'
inner join my_table c on a.PropertyAttributeValueID = c.PropertyAttributeValueID 
        and c.PropertyAttributeName='Manufacturer'
inner join my_table d on a.PropertyAttributeValueID = d.PropertyAttributeValueID 
        and d.PropertyAttributeName='Seat_Capacity'

, для повышения производительности вы можете добавить составной индекс в таблицу

create index  my_idx on my_table ( PropertyAttributeName
                , PropertyAttributeValueID 
               , PropertyAttributeValue);
...