2013-08-14 3 views
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 
     ) 

3 중첩 된 쿼리

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 행)을 반환합니다 FROM 절에서 초래되는 테이블과 오류를 줄 것이다, 첫 번째 행은 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

3 중첩 된 중첩 된 쿼리를 어떻게 추가 할 수 있습니까? 편집을 참조하십시오. – 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

당신은 CASE 표현 사용하여 SQL 문을 다시 작성할 수 있습니다 :

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