2013-06-28 6 views
0

문제가있는 곳이 표시되지 않습니다. 이 ORA-01789를 보여주는 유지 : 쿼리 블록은 내가 한 마지막 일이 전체 쿼리에 따라ORA-01789 : 쿼리 블록의 결과 열 수가 올바르지 않습니다.

substrb(TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'), -4, 2) ||'월'AS MONTH 

를 추가하는 것이 었습니다 결과 열 잘못된 번호가 있습니다. 나는 이틀 동안이 일에 매달 렸습니다 ... 아무도 도와 줄 수 있습니까?

SELECT X.* 
    FROM 
     ( 
     SELECT 
        (CASE 
          WHEN DAY.DAY = 'SUM' THEN DAY.DAY 
          ELSE TO_CHAR (TO_DATE (DAY.DAY, 'YYYY-MM-DD'), 'YYYYMMDD') 
         END 
        ) AS DAY, 
        DAY.WEEK, 
        MNOT.SUM_STD_CNT AS MNOT_CNT, 
        RSC.MOVIE_500K AS MOVIE_500K_CNT, 
        RSC.MOVIE_1M AS MOVIE_1M_CNT, 
        RSC.MOVIE AS MOVIE_CNT, 
        RSC.EXAM AS EXAM_CNT, 
        RSC.WEB AS WEB_CNT, 
        RSC.IMG AS IMG_CNT, 
        RSC.INTERRAC AS INTERRACTIVE_CNT, 
        RSC.DOC AS DOC_CNT, 
        MNOT.SUM_STD_CNT + RSC.MOVIE_500K + RSC.MOVIE_1M + RSC.MOVIE + RSC.EXAM + RSC.WEB + RSC.IMG + RSC.INTERRAC + RSC.DOC TOT_CNT 
      FROM 
        /* DATES */ 



(SELECT 
        TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYY.MM.DD') AS DAY 
        ,ceil(
          (
          to_number(substrb(TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'), -2, 2)) 
          + 7 
          - to_number(TO_CHAR(TO_DATE(TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'),'YYYYMMDD'),'D')) 
         )/7 
         )|| ' WEEK' AS WEEK, 

         substrb(TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'), -4, 2) ||'MONTH'AS MONTH 

         from DUAL 

        CONNECT BY TO_DATE('20130601', 'YYYY-MM-DD') + LEVEL - 1 <= TO_DATE('20130830', 'YYYY-MM-DD') 
        UNION ALL 
         SELECT 'SUM', '' FROM DUAL 
        ) DAY LEFT OUTER JOIN 
        /* RESOURCE */ 
        (
        SELECT 
           NVL(DT_G.COMM_DT, 'SUM') COMM_DT 
           ,NVL(SUM(DT_G.MOVIE_500K), 0) AS MOVIE_500K 
           ,NVL(SUM(DT_G.MOVIE_1M), 0) AS MOVIE_1M 
           ,NVL(SUM(DT_G.MOVIE), 0) AS MOVIE 
           ,NVL(SUM(DT_G.EXAM), 0) AS EXAM 
           ,NVL(SUM(DT_G.DOC), 0) AS DOC 
           ,NVL(SUM(DT_G.IMG), 0) AS IMG 
           ,NVL(SUM(DT_G.WEB), 0) AS WEB 
           ,NVL(SUM(DT_G.INTERRAC), 0) AS INTERRAC 
         FROM 
           (
           SELECT 
               COMM_DT 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_500K END MOVIE_500K 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_1M END AS MOVIE_1M 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_500K+SUMT.SUM_1M END AS MOVIE 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP11' THEN SUMT.SUM_STD_CNT END AS EXAM 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP12' THEN SUMT.SUM_STD_CNT END AS DOC 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP13' THEN SUMT.SUM_STD_CNT END AS IMG 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP14' THEN SUMT.SUM_STD_CNT END AS WEB 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP01' THEN SUMT.SUM_STD_CNT END AS INTERRAC 
            FROM (
               SELECT RSC_TP_DSCD, SUM(STDY_CNT) AS SUM_STD_CNT, SUM(MOVIE_STDY_CNT_N1M) AS SUM_1M, SUM(MOVIE_STDY_CNT_N500K) AS SUM_500K, COMM_DT 
               FROM (
                 SELECT RSC_SNO, STDY_CNT, MOVIE_STDY_CNT_N1M, MOVIE_STDY_CNT_N500K, COMM_DT 
                  FROM LRMS.V_EBSM_PKG_RSC_COMM_CNT 
                 WHERE PKG_SNO = 0 AND RSC_SNO != 0 
                 AND COMM_DT BETWEEN TO_CHAR(TO_DATE('20130501', 'YYYY-MM-DD'), 'YYYYMMDD') AND TO_CHAR(TO_DATE('20130530', 'YYYY-MM-DD'), 'YYYYMMDD') 
                 ) CNT 
                LEFT OUTER JOIN LRMS.V_LRRM_RSC RSC ON CNT.RSC_SNO = RSC.RSC_SNO 
               GROUP BY RSC_TP_DSCD, COMM_DT 
              ) SUMT 
           ) DT_G 
         GROUP BY ROLLUP(DT_G.COMM_DT) 
        ) RSC ON DAY.DAY = RSC.COMM_DT 

        LEFT OUTER JOIN 
        (
         SELECT NVL(SUM(STDY_CNT), 0) AS SUM_STD_CNT, NVL(COMM_DT, 'SUM') COMM_DT 
         FROM LRMS.V_EBSM_PKG_RSC_COMM_CNT 
         WHERE PKG_SNO != 0 AND RSC_SNO = 0 
           AND COMM_DT BETWEEN TO_CHAR(TO_DATE('20130601', 'YYYY-MM-DD'), 'YYYYMMDD') AND TO_CHAR(TO_DATE('20130830', 'YYYY-MM-DD'), 'YYYYMMDD') 
         GROUP BY ROLLUP(COMM_DT) 
        ) MNOT ON DAY.DAY = MNOT.COMM_DT 
     ) X 

WHERE 1=1 
and X.TOT_CNT IS NOT NULL 

답변

4

그것의이 부속 선택하십시오 UNION ALL에서

SELECT 
    TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYY.MM.DD') AS DAY, 
    ceil(...) || ' WEEK' AS WEEK, 
    substrb(...) ||'MONTH'AS MONTH 
from DUAL 
CONNECT BY TO_DATE('20130601', 'YYYY-MM-DD') + LEVEL - 1 <= TO_DATE('20130830', 'YYYY-MM-DD') 
UNION ALL 
SELECT 'SUM', '' FROM DUAL 

당신은 모두 선택에 대한 선택 목록에있는 항목의 같은 번호가 필요합니다. 당신은

한가지 더 당신이 아래처럼 쿼리를 편집 할 수 있습니다 -

SELECT 
    TO_CHAR (TO_DATE ('20130601','YYYY-MM-DD')+LEVEL- 1, 'YYYY.MM.DD') AS DAY, 
    ceil(...) || ' WEEK' AS WEEK, 
    substrb(...) ||'MONTH'AS MONTH 
from DUAL 
CONNECT BY TO_DATE('20130601', 'YYYY-MM-DD') + LEVEL - 1 <= TO_DATE('20130830', 'YYYY-MM-DD') 
UNION ALL 
SELECT 
    'SUM', /*DAY*/ 
    '', /*WEEK*/ 
    ''  /*MONTH*/ 
FROM DUAL 
0
시에 응답에

이 대답에 귀하의 의견은 : 두 번째에 무언가를 추가 할 필요가 있도록 처음에 MONTH 추가 (to_date 함수에서) 잘못된 날짜 형식을 제공합니다 ('to_date'함수에서)

SELECT 
    TO_CHAR (TO_DATE ('20130601','YYYYMMDD')+LEVEL- 1, 'YYYY.MM.DD') AS DAY, 
    ceil(...) || ' WEEK' AS WEEK, 
    substrb(...) ||'MONTH'AS MONTH 
from DUAL 
CONNECT BY TO_DATE('20130601', 'YYYYMMDD') + LEVEL - 1 <= TO_DATE('20130830', 'YYYYMMDD') 
UNION ALL 
SELECT 'SUM', '' as week,'' as month FROM DUAL 
+0

답장을 보내 주셔서 감사합니다. @pratik garg. 그래서 전체 쿼리를 수정하고 실행했습니다. MOMTH를 포함한 열을 보여줍니다. 그러나 MONTH 열을 추가 할 때 데이터가 표시되지 않습니다. MONTH를 포함하지 않으면 데이터가 표시됩니다. 이걸 어디서 잘못 아셨습니까? – user2470075

관련 문제