¿Cómo deshago la pivoteación de un resultado de consulta con Sum Case When que involucra uniones internas de varias tablas?
Tengo la misión de consultar varias tablas y sumar sus valores basándome en las opciones seleccionadas por el usuario y la forma en la que encontré para hacerlo vino de aquí usando sum case when then y else.
Ahora mi dilema es que puedo obtener los resultados, pero solo están estructurados en columnas, pero me encantaría que estuvieran estructurados en filas, así que descubrí pivot y unpivot, pero desafortunadamente no puedo obtener mis resultados en filas.
Aquí está mi consulta:
select
SUM(CASE WHEN opcao = ‘ABC’ THEN 1 ELSE 0 END) as ABC,
SUM(CASE WHEN opcao = ‘DEF’ THEN 1 ELSE 0 END) as DEF,
SUM(CASE WHEN opcao = ‘GHI’ THEN 1 ELSE 0 END) as GHI,
SUM(CASE WHEN opcao = ‘JKL’ THEN 1 ELSE 0 END) as JKL,
SUM(CASE WHEN opcao = ‘MNO’ THEN 1 ELSE 0 END) as MNO,
from
paciente_paciente pp
inner join coleta_preenchimento cp on cp.paciente_id = pp.paciente_id
inner join coleta_preenchimento_pergunta cpp on cpp.preenchimento_id = cp.preenchimento_id
inner join coleta_pergunta_opcao cpo on cpo.opcao_id = cpp.opcao_id
inner join coleta_atendimento_formulario caf on caf.preenchimento_id = cp.preenchimento_id
inner join coleta_atendimento ca on ca.atendimento_id = caf.atendimento_id
where
ca.status = ‘FINALIZADO’
and cpp.pergunta_id= 1076
Resultado que estoy obteniendo:
ABC | DEF | GHI | JKL | MNO |
---|---|---|---|---|
0 | 1 | 1 | 0 | 1 |
Resultado esperado:
OPTION | VALUE |
---|---|
ABC | 0 |
DEF | 1 |
GHI | 1 |
JKL | 0 |
MNO | 1 |
¡Gracias de antemano por toda la ayuda!
davy.ai
Para lograr el resultado esperado, se puede utilizar la función unpivot para transformar las columnas en filas. Aquí hay un ejemplo de cómo puede modificar su consulta para obtener la salida deseada:
En esta consulta modificada, se utiliza la función unpivot para transformar las columnas ABC, DEF, GHI, JKL y MNO en filas con los valores correspondientes. La salida de esta consulta estará en el formato esperado, con las opciones en una columna y los valores respectivos en otra.
¡Espero que esto ayude! Hágamelo saber si tiene más preguntas.