Member 12245539 Ответов: 1

Как преобразовать столбцы в строки в ms SQL server


У меня есть один столик
TIMETABLE
он содержит валы как
id| Day | p1 | p2 | p3 | p4| Short_By_Name_by_Class 
1 | mon | ES | GS | CP | GN| name1
2 | tue | AB | AC | AD | AE| name2
3 | Wed | BA | BB | BC | BD| name3


Теперь как преобразовать это как
PD |mon| tue| wed 
P1 |ES | AB | BA | 
P2 |GS | AC | BB | 
P3 |CP | AD | BC | 
P4 |GN | AE | BD | 


Я использую этот запрос

Что я уже пробовал:

SELECT [DAY], [MON],[TUES],[WED]FROM TIMETABLE WHERE Short_By_Name_by_Class='name1'
unpivot
(ID 
 for [DAY] in ([MON],[TUES],[WED])
 ) unpiv;

CHill60

Что не так с вашим запросом? Что происходит (или не происходит)?

Member 12245539

Это заметно.

Msg 156, Уровень 15, Состояние 1, Строка 2
Неверный синтаксис рядом с ключевым словом "unpivot".

CHill60

Так что исправьте синтаксис запроса - вот документация Использование PIVOT и UNPIVOT - SQL Server | Microsoft Docs[^]

Member 12245539

plz help я уже прошел по этой ссылке...

MadMyche

Ну, вы должны пройти через это снова; и медленно переносите образец, данный В то, что вам нужно, столбец за столбцом, пока вы не получите то, что вам нужно.

RedDk

Переходя к сути дела, смотрите здесь:
https://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query
А здесь:
https://www.codeproject.com/Tips/1011591/Dynamic-Pivot-Query-in-SQL-Server

1 Ответов

Рейтинг:
11

Maciej Los

Прежде всего, вы должны оператор UNPIVOT[^] данные {p1, p2, p3, p4} к PD и PDValue затем поля снова поворачивают их - на Day поле.

SELECT PD, [mon], [tue], [wed], ...
FROM (
    SELECT id, Day, PD, PDValue 
    FROM (
            SELECT id, Day, p1, p2, p3, p4  
            FROM TIMETABLE
        ) pvtData
    UNPIVOT (PDValue FOR PD IN (p1, p2, p3, p4))
) AS unpvtData
PIVOT (PDValue FOR Day IN ([mon], [tue], [wed], ...)) AS Final


Примечание: не проверено!