es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinando dos tablas con una declaración PIVOT – SQL Oracle 11g

Tengo una tabla llamada DWH_DATA:

FECHA FK_ESTADO_FEDERAL FK_ACOMODACIÓN LLEGADAS NOCHES


200010 W96-7 61 2433 16111
200011 W96-9 86 3718 30319
200012 W96-3 87 1100 8487
200101 W96-2 998 239 1038

Información adicional: La fecha es el primer número (año) más los dos últimos números (mes).

Luego tengo una tabla llamada DWH_ESTADOS_FEDERALES:

CÓDIGO (PK) NOMBRE
———– ——————-
W96-2 País 2
W96-3 País 3
W96-9 País 9
W96-7 País 7

Ahora me gustaría obtener todas las noches de cada estado federal. El resultado debería ser así:

      País 2  País 3  País 9  País 7

200010 6979 16111
200011 …
200012 …
200101 …

Lo que ya he intentado es una instrucción PIVOT:

SELECT * FROM
(
SELECT
FECHA,
NOCHES,
dwh_data.fk_estadofederal AS estadoFederal
FROM
dwh_data JOIN DWH_ESTADOS_FEDERALES
ON dwh_data.fk_estadofederal = dwh_estados_federales.codigo
) t
PIVOT(
COUNT(estadoFederal)
FOR estadoFederal IN (‘País 2′,’País 3′,’País 9’)
) ORDER BY 1;

El resultado que obtengo con el mío es:

FECHA NOCHES ‘País 2’ ‘País 3’ ‘País 9’


197707 83648 0 0 0
197707 87301 0 0 0
197707 97350 0 0 0

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la instrucción PIVOT que intentaste no está dando el resultado deseado. En lugar de usar la función COUNT en el PIVOT, deberías intentar usar SUM para obtener las noches totales para cada estado federal.

    Aquí está la consulta modificada que debería funcionar:

    SELECT DATETIME, 
    SUM(CASE WHEN dwh_data.fk_federal_state = 'W96-2' THEN NIGHTS ELSE 0 END) AS 'País 2',
    SUM(CASE WHEN dwh_data.fk_federal_state = 'W96-3' THEN NIGHTS ELSE 0 END) AS 'País 3',
    SUM(CASE WHEN dwh_data.fk_federal_state = 'W96-9' THEN NIGHTS ELSE 0 END) AS 'País 9',
    SUM(CASE WHEN dwh_data.fk_federal_state = 'W96-7' THEN NIGHTS ELSE 0 END) AS 'País 7'
    FROM dwh_data 
    JOIN DWH_FEDERAL_STATES
    ON dwh_data.fk_federal_state = DWH_FEDERAL_STATES.CODE
    GROUP BY DATETIME
    ORDER BY DATETIME;
    

    Esta consulta utiliza agregación condicional usando declaraciones CASE y la función SUM para obtener las noches totales para cada estado federal en cada mes. La cláusula GROUP BY agrupa el resultado por columna DATETIME y la cláusula ORDER BY ordena la salida en orden ascendente según la columna DATETIME.

    Esto debería darte el resultado deseado como se muestra en la tabla de resultados de ejemplo en la pregunta.

Comments are closed.