SOLVED

Como hacer un UNPIVOT de más de una columna

Brass Contributor

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:

 

TablasTablas

 

¿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!

1 Reply
best response confirmed by RaulSG (Brass Contributor)
Solution

@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!

 

1 best response

Accepted Solutions
best response confirmed by RaulSG (Brass Contributor)
Solution

@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!

 

View solution in original post