/ / SQL wybierz wartości każdej wybranej kolumny w osobnych wierszach - sql, wybierz

SQL wybiera wartości dla każdej wybranej kolumny w osobnych wierszach - sql, select

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 № 1

Spó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