Как добавить результаты двух команд выбора в одном запросе и из одной таблицы - Oracle SQL - PullRequest
1 голос
/ 01 мая 2020

У меня есть этот запрос, который отлично работает:

SELECT 
    RE.IDREUNIONFALLA as "IdReunion",
    NVL((select count(1) as pozos 
        from REUNION_FALLAPREMATURA 
        where IDREUNIONFALLA=RE.IDREUNIONFALLA  
        group by IDREUNIONFALLA),0)  as "PlanificadosFallas",
    NVL((select count(1) as pozos 
        from REUNION_FALLAPOZOS_AD 
        where IDREUNIONFALLA=RE.IDREUNIONFALLA  
        group by IDREUNIONFALLA),0)  as "PlanificadosPozos"
FROM  REUNIONFALLA RE

Этот запрос возвращает несколько строк с двумя столбцами, каждый из которых имеет целое число, , например:

enter image description here

Что мне нужно сделать, это получить сумму от каждой строки в новом столбце. Вы можете видеть, что я имею в виду на на следующем изображении:

enter image description here

Я уже так сказал:

SELECT 
    NVL((SELECT count(1) as pozos 
        from REUNION_FALLAPREMATURA 
        where IDREUNIONFALLA=RE.IDREUNIONFALLA 
        group by IDREUNIONFALLA),0)  as "PlanificadosFallas",
    NVL((SELECT count(1) as pozos 
        from REUNION_FALLAPOZOS_AD 
        where IDREUNIONFALLA=RE.IDREUNIONFALLA 
        group by IDREUNIONFALLA),0)  as "PlanificadosPozos",
    NVL((SELECT  SUM(fallas) PlanificadosTotal 
        FROM -- i add this five lines
            ( 
                select count(1) as fallas 
                from REUNION_FALLAPREMATURA 
                where IDREUNIONFALLA=RE.IDREUNIONFALLA  
                group by IDREUNIONFALLA

                UNION ALL

                select count(1) as fallas 
                from REUNION_FALLAPOZOS_AD 
                where IDREUNIONFALLA=RE.IDREUNIONFALLA 
                group by IDREUNIONFALLA
            )),0) as "Total"
FROM  REUNIONFALLA RE

, но я понял следующая ошибка:

ORA-00904: "RE". "IDREUNIONFALLA": неверный идентификатор

есть ли решение для этого?

1 Ответ

1 голос
/ 01 мая 2020

[править] Это чище:

SELECT 
    RE.IDREUNIONFALLA as "IdReunion",
    NVL(t1.pozos,0)  as "PlanificadosFallas",
    NVL(t2.pozos,0)  as "PlanificadosPozos",
    (NVL(t1.pozos,0)s + NVL(t2.pozos,0)) AS "Total"
FROM  REUNIONFALLA RE
LEFT JOIN (
    select IDREUNIONFALLA, count(1) as pozos
    from REUNION_FALLAPREMATURA 
    group by IDREUNIONFALLA
) t1 
    ON t1.IDREUNIONFALLA = RE.IDREUNIONFALLA
LEFT JOIN (
    select IDREUNIONFALLA, count(1) as pozos 
    from REUNION_FALLAPOZOS_AD 
    group by IDREUNIONFALLA
) t2 
    ON t2.IDREUNIONFALLA=RE.IDREUNIONFALLA 

Как видите, вы делаете подсчет один раз, а не для каждой строки: должен выполняться быстрее, если у вас большое количество строк.


Это должно сделать это:

SELECT 
    t1.IdReunion,
    t1.PlanificadosFallas,
    t1.PlanificadosPozos,
    (t1.PlanificadosFallas + t1.PlanificadosPozos) AS "Total"
FROM (
    SELECT 
          RE.IDREUNIONFALLA as "IdReunion",
          NVL((select count(1) as pozos from REUNION_FALLAPREMATURA where IDREUNIONFALLA=RE.IDREUNIONFALLA  group by IDREUNIONFALLA),0)  as "PlanificadosFallas",
          NVL((select count(1) as pozos from REUNION_FALLAPOZOS_AD where IDREUNIONFALLA=RE.IDREUNIONFALLA  group by IDREUNIONFALLA),0)  as "PlanificadosPozos"
    FROM  REUNIONFALLA RE
) AS t1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...