/ / SQL selecciona los valores de cada columna seleccionada en filas separadas - sql, selecciona

SQL seleccionar valores de cada columna seleccionada en filas separadas - sql, seleccionar

Tengo una tabla con cientos de filas y decenas de columnas W:

Column1 | Column2_W | Column3_W | ColumnX_W
123   |     A     |     B     |    x
223   |     A     |    NULL   |  NULL

¿Cómo puedo seleccionarlo para que la salida sea:

Column1 | W
123   | A
123   | B
123   | x
223   | A

EDITAR: Soy muy consciente de que estoy trabajando con un terrible "diseño" de base de datos. Desafortunadamente, no puedo cambiarlo. Esta pregunta es en realidad parte de un problema mayor que se me presentó hoy. Probaré las ideas dadas mañana.

Respuestas

3 para la respuesta № 1

Mira este articulo: UNPIVOT: Normalizando los datos sobre la marcha

Desafortunadamente, se quedará atascado escribiendo los nombres de las columnas con cualquiera de las soluciones que utilice. A continuación se muestra una muestra de UNPIVOT en SQL Server ...

SELECT Column1, W
FROM YourTable
UNPIVOT (W for Column1 in (Column2_W, Column3_W /* and so on */)) AS W

6 para la respuesta № 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

Mejor opción: ¡rediseña tu base de datos! Esto parece una hoja de cálculo, no una base de datos relacional.


0 para la respuesta № 3

Si no tiene ninguna opción 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