2013-08-14 2 views
1

Мне нужно написать 1 состояние, которое будет делать несколько вещей.multiple select from query Ошибка

Здесь сначала выберите, который выбирает счет, и он отлично работает.

select PLANNED 
    from (SELECT count(FACT.EVENT) AS PLANNED 
      FROM FACT FACT 
     WHERE FACT.PLANNEDOTGFLAG = 1 
      AND FACT.STARTDATETIME >= SYSDATE - 365 
     ) 

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

select count(effected) 
    from fact 
where startime between 01/01/2013 and 01/02/2013 

Мне было интересно, если я могу сделать что-то вроде этого

select PLANNED, 
     Count_EFFECTED 
from (SELECT count(FACT.EVENT) AS PLANNED 
      FROM FACT FACT 
     WHERE FACT.PLANNEDOTGFLAG = 1 
      AND FACT.STARTDATETIME >= SYSDATE - 365 

     union all 

     select count(FACT.effected) AS Count_EFFECTED 
      from fact fact 
     where fact.startime between 01/01/2013 and 01/02/2013 
     ) 

третий вложенный запрос

SELECT 
    A.PLANNED, 
    B.effec, 
    C.XOUND // not working yet. 
FROM 
    (SELECT count(FACT.EVENT) AS PLANNED FROM FACT FACT 
     WHERE FACT.PLANNEDOTGFLAG = 1 AND FACT.STARTDATETIME >= SYSDATE - 365) A, 

    (select count(FACT.effected) AS effec from fact fact 
     WHERE FACT.STARTDATETIME between 01/01/2013 and 01/02/2013) B 
    //how can I add 3rd select which is nested. 
    (select round(FACT.ID) AS XOUND 
     FROM 
     (SELECT SUM(FACT.CIM)/SUM(FACT.CUST) AS ID 
      FROM FACT FACT 
      WHERE FACT.STARTDATETIME between 01/01/2013 and 01/02/2013 
      AND OTGFLAG = 1 AND PLANNEDOTGFLAG = 0)) C 
+0

мне нужна помощь с добавлением 3-й вложенного запроса может кто-то поможет. см. править. – Mowgli

+0

Вы пытаетесь получить сумму всех столбцов «CIM» и сумму всех столбцов «CUST» для заданных критериев? – Renu

+0

@Renu Да, получив сумму обоих и разделив ее, чтобы получить коэффициент. – Mowgli

ответ

1

Ваш второй запрос даст вам ошибку, как таблицы, в результате в ЕКОМ будет возвращать только один столбец (2 строки), первая строка будет иметь PLANNED_OUTAGES, а вторая будет содержать effect соответственно.

Для вашего требования вы можете изменить ваш запрос:

Включенных 3 запроса:

SELECT A.PLANNED_OUTAGES,B.effec, C.ID 
    FROM (SELECT count(FACT.EVENT) AS PLANNED 
      FROM FACT FACT 
     WHERE FACT.PLANNEDOTGFLAG = 1 AND FACT.STARTDATETIME >= SYSDATE - 365) A, 
     (select count(FACT.effected) AS effec 
      from fact fact 
     WHERE FACT.STARTDATETIME between 01/01/2013 and 01/02/2013) B, 
     (SELECT ROUND(SUM(FACT.CIM)/SUM(FACT.CUST)) AS ID 
      FROM FACT FACT 
     WHERE FACT.STARTDATETIME between 01/01/2013 and 01/02/2013 
      AND OTGFLAG = 1 AND PLANNEDOTGFLAG = 0 
     GROUP BY FACT.CIM,FACT.CUST) C 
+0

Спасибо большое, что сработало, у меня почти было это. что-то новое. – Mowgli

+0

Как добавить третий запрос с двойным вложением, см. Edit. – Mowgli

+0

Вы пытаетесь получить сумму всех столбцов «CIM» и сумму всех столбцов «CUST» для заданных критериев? – Renu

1

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

SELECT 
    Planned_Outages = COUNT(CASE WHEN Fact.PlannedOTGFlag = 1 AND Fact.StartDateTime >= Sysdate - 365 THEN Fact.Event END), 
    Effec = COUNT(CASE WHEN FactStartTime between '01/01/2013' and '01/02/2013' THEN Fact.Effected END) 
FROM 
    Fact 
1

Вы можете переписать SQL заявление, используя CASE выражение:

select count(case 
       when plannedotgflag = 1 AND 
        startdatetime >= SYSDATE - 365 
       then 1 
      end 
      ) as planned 
    , count(case 
       when startime between to_date('01/01/2013', 'dd/mm/yyy') and 
            to_date('01/02/2013', 'dd/mm/yyy') 
       then 1 
      end 
      ) as effected 
    from fact