Таблица PIVOT SQL Server для возврата столбцов / строк - PullRequest
0 голосов
/ 06 октября 2018

Таблица выглядит следующим образом:

CREATE TABLE [dbo].[PHONES]
(
    [ITEM_SERIAL] [nvarchar](100) NULL,
    [ATTRIBUTE] [nvarchar](max) NULL,
    [ATR_VALUE] [nvarchar](max) NULL,
    [ITEM_IMEI] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Эта таблица содержит информацию о моих телефонах, таких как IMEI, COLOR, MAKE, MODEL и т. Д. ... Ключ в этой таблице - ITEM_SERIAL.

Я хочу вернуть результаты в виде столбцов для каждого телефона.

IE, вместо этого:

This

Мне нужно получитьзапрос как этот

select Make, Model, Model_Number, Memory, Carrier 
from phones

Ответы [ 2 ]

0 голосов
/ 06 октября 2018
select
    [Make]          ,
    [Model]         ,
    [Model_Number]  ,
    [Memory]        ,
    [Carrier]
from
(
  select
    [ATTRIBUTE] ,
    [ATR_VALUE]
  from
    [dbo].[PHONES]
)
    result
pivot
(
  max([ATR_VALUE])
  for
    [ATTRIBUTE]
    in
    (
        [Make]          ,
        [Model]         ,
        [Model_Number]  ,
        [Memory]        ,
        [Carrier]
    )
)
    pivot_result

найти синтаксис PIVOT и UNPIVOT по следующей ссылке:

FROM - Использование PIVOT и UNPIVOT

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

Существует три подхода - множественные объединения, сводные данные и условное агрегирование.Я склоняюсь к последнему:

select p.item_serial,
       max(case when attribute = 'MAKE' then atr_value end) as make,
       max(case when attribute = 'MODEL' then atr_value end) as model,
       . . .
from phones p
group by p.item_serial;

Почему я предпочитаю это?Производительность стабильна, независимо от количества атрибутов (в отличие от метода join).Синтаксис объединяет основные функции SQL и является более мощным, чем pivot (все, что вы можете делать с pivot, вы можете делать с условным агрегированием и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...