Mam tabelę z setkami rzędów i dziesiątkami kolumn W:
Column1 | Column2_W | Column3_W | ColumnX_W
123 | A | B | x
223 | A | NULL | NULL
Jak mogę to wybrać, aby wynik był:
Column1 | W
123 | A
123 | B
123 | x
223 | A
EDYTOWAĆ: Jestem w pełni świadomy, że pracuję z okropnym „projektem” DB. Niestety nie mogę tego zmienić. To pytanie jest częścią większego problemu, który dostałem dzisiaj. Spróbuję podanych pomysłów jutro
Odpowiedzi:
3 dla odpowiedzi № 1Spójrz na ten artykuł: UNPIVOT: Normalizacja danych w locie
Nieszczęśliwie „utkniesz w dłoni, wpisując nazwy kolumn za pomocą dowolnego z używanych rozwiązań. Oto przykład z użyciem UNPIVOT
w SQL Server ...
SELECT Column1, W
FROM YourTable
UNPIVOT (W for Column1 in (Column2_W, Column3_W /* and so on */)) AS W
6 dla odpowiedzi nr 2
SELECT Column1, Column2_W
FROM table
UNION ALL
SELECT Column1, Column3_W
FROM table
UNION ALL
SELECT Column1, Column4_W
FROM table
....
ORDER BY Column1
Lepsza opcja: przeprojektuj swoją bazę danych! To wygląda jak arkusz kalkulacyjny, a nie relacyjna baza danych.
0 dla odpowiedzi № 3
Jeśli nie masz żadnych opcji UNPIVOT ...
SELECT
Column1,
CASE ColumnID WHEN 2 THEN Column2_W
WHEN 3 THEN Column3_W
...
WHEN X THEN ColumnX_W
END AS Column2
FROM
yourTable
CROSS JOIN
( SELECT 2 AS ColumnID
UNION ALL SELECT 3
...
UNION ALL SELECT X
)
AS UnPivot