Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用查询获取月累计数据_Sql_Oracle - Fatal编程技术网

Sql 如何使用查询获取月累计数据

Sql 如何使用查询获取月累计数据,sql,oracle,Sql,Oracle,当我运行这个查询时,它应该在DAY列210301、201302和SUM下显示3行结果。但由于某些原因,它只在DAY列下显示SUM行。其想法是,“201301”行在1月份累计31天的数据。 有人能告诉我他们为什么不来吗 SELECT X.* FROM ( SELECT (CASE WHEN DAY.DAY = 'SUM' THEN DAY.DAY

当我运行这个查询时,它应该在DAY列210301、201302和SUM下显示3行结果。但由于某些原因,它只在DAY列下显示SUM行。其想法是,“201301”行在1月份累计31天的数据。 有人能告诉我他们为什么不来吗

    SELECT X.*
 FROM
      ( 
        SELECT 
                    (CASE
                             WHEN DAY.DAY = 'SUM' THEN DAY.DAY
                             ELSE 
                             TO_CHAR (TO_DATE (DAY.DAY, 'YYYY-MM'), 'YYYYMM') 
                       END
                    ) AS DAY,
                    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(ADD_MONTHS(TO_DATE('201301','YYYYMM'),LEVEL-1), 'YYYYMM') AS DAY
                      FROM DUAL
                      CONNECT BY ADD_MONTHS(TO_DATE('201301','YYYYMM'),LEVEL-1 ) <= TO_DATE('201302', 'YYYYMM')
                      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('201301', 'YYYY-MM'), 'YYYYMM') AND TO_CHAR(TO_DATE('201311', 'YYYY-MM'), '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
                    /* MNOTE */
                    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('201301', 'YYYY-MM'), 'YYYYMM') AND TO_CHAR(TO_DATE('201306', 'YYYY-MM'), 'YYYYMM')
                      GROUP BY ROLLUP(COMM_DT)
                    ) MNOT  ON DAY.DAY = MNOT.COMM_DT
        ) X

 WHERE 1=1
 and X.TOT_CNT IS NOT NULL 

这可能是因为总和字段TOT_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

nvlMNOT.SUM_STD_CNT,0+nvlRSC.MOVIE_500K,0+nvlRSC.MOVIE_1M,0+nvlRSC.MOVIE,0+nvlRSC.EXAM,0+nvlRSC.WEB,0+nvlRSC.IMG,0+nvlRSC.INTERRAC,0+nvlRSC.DOC,0+AS TOT_CNT


然后尝试

然后在DAY.DAY='SUM'然后DAY.DAY上显示ora-00937没有单个组函数如何修复此问题?抱歉,请删除聚合函数并重试。nvlMNOT.SUM_STD_CNT,0+nvlRSC.MOVIE_500K,0+nvlRSC.MOVIE_1M,0+nvlRSC.MOVIE,0+nvlRSC.EXAM,0+nvlRSC.WEB,0+nvlRSC.IMG,0+nvlRSC.INTERRAC,0+nvlRSC.DOC,0+AS TOT_CNTI刚刚尝试过,它确实显示了“201301”和“201302”谢谢!但是,我仍然没有得到列下的数据;“201301”和“201302”的MNOT、MOVIEW、MOVIEW、EXAME、WEB、IMG、INTERACTIVE、DOC“SUM”行显示数据,但其他两行不显示数据。你能帮我做这个吗?如果您不检查数据,我将非常感谢您的帮助,您无法说出为什么该条件不返回任何值。请检查位置条件PKG_SNO!=0和RSC_SNO=0,并且TO_CHARTO_DATE'201301'、'YYYY-MM'、'yyyyymm'和TO_CHARTO_DATE'201306'、'yyyyy-MM'、'yyyyyymm'之间的COMM_DT将返回'201301'和'201302'的一些值。如果没有示例数据、当前和所需结果以及表结构的描述,您的问题将无法得到答案。你让读者对你应该首先提供的信息做额外的猜测工作。