Как преобразовать таблицы в T-SQL с помощью оператора PIVOT? [закрыто]

Вопросы и ответы

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

ID КОД ЗНАЧЕНИЕ
1 A 5
1 B 6
1 C 7
1 C 8
1 C 9

и я хочу получить следующее:

ID A B C
1 5 6 7
1 5 6 8
1 5 6 9

Как это возможно?

Спасибо!

Я пробовал использовать сводные таблицы, но не хочу агрегировать ‘Код’. Есть ли решение для этого?

Ответ

Для преобразования таблиц в T-SQL с использованием оператора PIVOT, важно понимать, что данный оператор в основном предназначен для агрегации данных, что может затруднить его использование, если вы не хотите агрегации. В вашем случае вы хотите преобразовать строки с одинаковым ID и CODE в столбцы, не aggregiting их. Чтобы добиться этого, можно использовать временные таблицы или CTE (Common Table Expressions).

Вот метод, который поможет вам достичь желаемого результата, используя CTE и PIVOT. Предположим, что у вас исходная таблица называется YourTable.

Шаги:

  1. Создайте временную CTE с нумерацией строк: Для начала создайте CTE, в которой вы будете нумеровать строки для каждого уникального CODE, чтобы можно было использовать эти номера для создания столбцов.

  2. Используйте оператор PIVOT для преобразования данных.

Вот полный пример кода:

-- Создайте временную таблицу для примера
CREATE TABLE YourTable (
    ID INT,
    CODE CHAR(1),
    VALUE INT
);

-- Вставьте данные в таблицу
INSERT INTO YourTable (ID, CODE, VALUE) VALUES
(1, 'A', 5),
(1, 'B', 6),
(1, 'C', 7),
(1, 'C', 8),
(1, 'C', 9);

-- Используем CTE для создания уникальной нумерации для CODE
WITH NumberedValues AS (
    SELECT
        ID,
        CODE,
        VALUE,
        ROW_NUMBER() OVER (PARTITION BY ID, CODE ORDER BY (SELECT NULL)) AS RN
    FROM YourTable
)

SELECT 
    ID,
    [A],
    [B],
    [C]
FROM 
    NumberedValues
PIVOT
(
    MAX(VALUE) FOR CODE IN ([A], [B], [C])
) AS PivotTable
ORDER BY ID, RN;

Объяснение:

  1. CTE (Common Table Expression): CTE NumberedValues создает набор данных, где каждая строка имеет уникальный номер, который позволяет вам различать строки с одинаковыми значениями CODE.

  2. Оператор PIVOT: Поворот (PIVOT) использует MAX(VALUE) для преобразования значений CODE в столбцы (A, B, C). Мы используем ROW_NUMBER() для создания уникальных записей для каждой комбинации ID и CODE.

Таким образом, вы сможете получить желаемый формат таблицы, где ID будет дублироваться, а значения CODE будут представлены в качестве отдельных столбцов.

Вывод:

Этот метод позволяет преобразовать вашу исходную таблицу в нужный формат без необходимости объединять значения. Запустите приведенный выше код в вашей базе данных SQL Server, и он должен вернуть ожидаемый результат.

Оцените материал
Добавить комментарий

Капча загружается...