Forum Discussion
Como hacer un UNPIVOT de más de una columna
Tengo que crear una vista en SQL Server haciendo un UNPIVOT de una tabla y no consigo hacerlo correctamente. A partir de una tabla origen como la primera, tengo que conseguir la segunda:
¿Cómo tendría que ser la consulta SQL para conseguir esta vista a partir de la tabla original? Los colores es simplemente para saber como se tienen que distribuir los valores en la consulta resultado.
Cualquier ayuda será bien recibida. Muchas gracias!
RaulSG
Me contesto a mi mismo gracias a la respuesta que me ha proporcionado jachguate.Hacer un unpivot de una única columna (el Tramo), y luego quieres dejar en una única columna el valor de varias columnas del origen, dependiendo de cuál tramo resulte tener cada fila del resultado.
Para lograrlo, puedes hacer el unpivot normal, incluyendo ambas columnas (P1, P2) en el resultado, para finalmente, valiéndote de una sentencia case formar la columna P con el valor que corresponda (P1 o P2) según el Tramo.
Este es uno de aquellos casos dónde un poco de código vale más que mil palabras. Suponiendo que tu tabla origen se llama base, esta sentencia te da el resultado:
select IDBarem , IDTipo , Tramo , Nota , case when Tramo = '50-54' then P1 when Tramo = '55-59' then P2 end P from (select IDBarem, IDTipo, P1, P2, [50-54], [55-59] from base) p unpivot (Nota for Tramo in ([50-54], [55-59])) as unpvt
Funciona perfectamente.
Muchas gracias!
- RaulSGBrass Contributor
RaulSG
Me contesto a mi mismo gracias a la respuesta que me ha proporcionado jachguate.Hacer un unpivot de una única columna (el Tramo), y luego quieres dejar en una única columna el valor de varias columnas del origen, dependiendo de cuál tramo resulte tener cada fila del resultado.
Para lograrlo, puedes hacer el unpivot normal, incluyendo ambas columnas (P1, P2) en el resultado, para finalmente, valiéndote de una sentencia case formar la columna P con el valor que corresponda (P1 o P2) según el Tramo.
Este es uno de aquellos casos dónde un poco de código vale más que mil palabras. Suponiendo que tu tabla origen se llama base, esta sentencia te da el resultado:
select IDBarem , IDTipo , Tramo , Nota , case when Tramo = '50-54' then P1 when Tramo = '55-59' then P2 end P from (select IDBarem, IDTipo, P1, P2, [50-54], [55-59] from base) p unpivot (Nota for Tramo in ([50-54], [55-59])) as unpvt
Funciona perfectamente.
Muchas gracias!