Сводная таблица в SQL - PullRequest
       15

Сводная таблица в SQL

0 голосов
/ 25 апреля 2018

Я пытаюсь взять свой исходный запрос и повернуть его в столбце SerOption со столбцом «Значение» под каждым соответствующим SerOption. Поэтому для моего примера я хочу, чтобы в качестве заголовков моих столбцов использовались «Asset Tag», «Make», «Model», «Description» и «Serial Number», а также каждый [Value] в соответствующем столбце.

Мой оригинальный запрос:

SELECT s.SerOption, sv.value as [Value], sv.SerialCat, sv.item, [load]  
    FROM SerialValues SV JOIN [Serialization] S on S.OID = sv.SerialCat 
WHERE [load] in (141955) 
ORDER BY item, serialCat

И моя попытка поворота до сих пор:

SELECT *
FROM (
    SELECT s.SerOption, sv.value as [Value], sv.SerialCat, sv.item, [load]  
        FROM SerialValues SV JOIN [Serialization] S on S.OID = sv.SerialCat 
    WHERE [load] in (141955) 
    ORDER BY item, serialCat
) AS serial
PIVOT
(
[Value] FOR s.SerOption in ('Asset Tag', 'Make', 'Model', 'Description', 'Serial Number')
) AS PVT

Ошибка, которую я получаю при попытке запустить это: Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и общих табличных выражениях, если также не указаны TOP, OFFSET или FOR XML. Также, похоже, есть синтаксическая ошибка рядом с ключевым словом FOR.

UPDATE Я использовал следующий обновленный запрос:

SELECT *
FROM (SELECT s.SerOption, sv.value as [Value], sv.SerialCat, sv.item, [load]  
FROM SerialValues SV JOIN
[Serialization] S
ON S.OID = sv.SerialCat 
WHERE [load] in (141955) 
) s
PIVOT (
MAX([Value]) FOR s.SerOption in ([Asset Tag], [Make], [Model], [Description], [Serial Number])
) AS PVT;

Чтобы проиллюстрировать, что я получаю сейчас, когда я заказал PVT по пунктам, я получаю следующее (я знаю, что мне не нужен порядок по, просто чтобы показать, что я получаю отдельные значения строк для каждого элемента): enter image description here

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Я понял это. Я выбрал, какие элементы я искал во внешнем выборе, и удалил sv.SerialCat из внутреннего выбора. Следующий запрос является выигрышным.

SELECT [item], [load], [Asset Tag], [Make], [Model], [Description], [Serial Number]
FROM (SELECT s.SerOption, sv.value as [Value],  sv.item, [load]  
      FROM SerialValues SV JOIN [Serialization] S on S.OID = sv.SerialCat 
      WHERE [load] in (141955) 

     ) s
PIVOT (
    MAX([Value]) FOR s.SerOption in ([Asset Tag], [Make], [Model], [Description], [Serial Number])
) AS PVT 
0 голосов
/ 25 апреля 2018

Я думаю, что вы намереваетесь:

SELECT *
FROM (SELECT s.SerOption, sv.value as [Value], sv.SerialCat, sv.item, [load]  
      FROM SerialValues SV JOIN
           [Serialization] S
           ON S.OID = sv.SerialCat 
      WHERE [load] in (141955) 
     ) s
PIVOT (
    MAX([Value]) FOR s.SerOption in ([Asset Tag], [Make], [Model], [Description], [Serial Number])
) AS PVT;

Неясно, какую функцию агрегирования вы хотите. Я выбрал MAX() в качестве примера.

...