Transponer filas a columnas utilizando múltiples pivotes.
Estoy tratando de transponer filas a columnas sin éxito. Esto es lo que tengo ahora:
WEEK_NUMBER | VAL9 | VAL4 | VAL5 | VAL7 |
---|---|---|---|---|
45 | 63.27% | 28.58% | 7.92% | 0.23% |
52 | 65.66% | 26.16% | 7.80% | 0.38% |
50 | 90.97% | 8.45% | 0.29% | 0.29% |
46 | 82.49% | 12.43% | 3.01% | 2.06% |
47 | 66.33% | 29.53% | 3.77% | 0.36% |
51 | 65.36% | 31.83% | 2.69% | 0.11% |
49 | 61.88% | 28.29% | 9.46% | 0.37% |
44 | 45.34% | 45.55% | 8.45% | 0.66% |
48 | 43.75% | 40.01% | 16.01% | 0.23% |
Esto está basado en la siguiente consulta:
select
to_char(for_date,'ww') as week_number
,val9
,val4
,val5
,val7
from data_tab
where to_char(for_date,'yy') = '21'
Estoy tratando de obtener el siguiente resultado:
01 | 02 | .. | 51 | 52 | |
---|---|---|---|---|---|
VAL9 | 0 | 0 | .. | 65.36% | 65.66% |
VAL4 | 0 | 0 | .. | 31.83% | 26.16% |
VAL5 | 0 | 0 | .. | 2.69% | 7.80% |
VAL7 | 0 | 0 | .. | 0.11% | 0.38% |
He intentado con la siguiente consulta, pero no he tenido éxito. Si alguien puede indicarme en la dirección correcta, lo agradecería.
select * from (
select
to_char(for_date,'ww') as week_number
,val9
,val4
,val5
,val7
from data_tab
where to_char(for_date,'yy') = '21')
pivot (
min(val9)--, min(val4), min(val5), min(val7)
for week_number in (01 ,02 ,03 ,04 ,05 ,06 ,07 ,08 ,09 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 ,41 ,42 ,43 ,44 ,45 ,46 ,47 ,48 ,49 ,50 ,51 ,52 ,53)
)
davy.ai
Parece que estás en el camino correcto utilizando una función de pivote. Sin embargo, parece que has especificado demasiadas columnas en la cláusula de pivote. En lugar de especificar todos los posibles números de semana, puedes usar SQL dinámico para generar la lista de columnas basada en los valores en la columna WEEK_NUMBER de tus datos fuente.
Aquí tienes una consulta de ejemplo que debería darte el resultado deseado:
Esta consulta utiliza una expresión de tabla común (CTE) para despivotar las columnas VAL9, VAL4, VAL5 y VAL7 en una tabla “pivot_data” que tiene tres columnas: “nombre_val”, “numero_semana” y “valor”. La CTE filtra las filas para incluir solo los datos del año 2021.
Luego, la consulta principal realiza una operación de pivote en la tabla “pivot_data” utilizando la función MAX para agregar la columna “valor”. La operación de pivote genera dinámicamente la lista de números de semana basados en los valores distintos en la columna “numero_semana” de la tabla “data_tab”. Los resultados se ordenan por número de semana.
Finalmente, la consulta selecciona la columna “nombre_val” junto con las columnas generadas dinámicamente a partir de la operación de pivote.
Esto debería darte una tabla de resultados que se ve así: