首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle中使用IW和MM

在Oracle中使用IW和MM
EN

Stack Overflow用户
提问于 2014-01-24 16:38:23
回答 1查看 267关注 0票数 0

我使用IW表示每周结果,使用MM表示每月结果。但是我总是得到一个错误:

代码语言:javascript
复制
ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

我的问题是

(每周)

代码语言:javascript
复制
SELECT 'Data'
       || ',' || TO_CHAR(d.dtime_day, 'MM/dd/yyyy')
       || ',' || NVL(o.cnt_opened, 0) --as cnt_opened
       || ',' || NVL(c.cnt_closed, 0) --as cnt_closed
FROM owner_dwh.dc_date d
  LEFT JOIN (
              SELECT
                TRUNC(t.create_time, 'IW') AS report_date,
                count(*)                   AS cnt_opened
              FROM app_account.otrs_ticket t
              WHERE t.create_time BETWEEN SYSDATE - 30 AND SYSDATE
              GROUP BY TRUNC(t.create_time)
            ) o ON d.dtime_day = o.report_date
  LEFT JOIN (
              SELECT
                TRUNC(t.close_time, 'IW') AS report_date,
                count(*)                  AS cnt_closed
              FROM app_account.otrs_ticket t
              WHERE t.close_time BETWEEN SYSDATE - 30 AND SYSDATE
              GROUP BY TRUNC(t.close_time)
            ) c ON d.dtime_day = c.report_date
WHERE d.dtime_day BETWEEN SYSDATE - 30 AND SYSDATE
ORDER BY d.dtime_day;

(每月)

代码语言:javascript
复制
SELECT 'Graph,ColumnChart,Open vs. Close Issues' FROM DUAL;

SELECT 'Data,Date,Opened,Closed' from dual;

SELECT 'Data'
       || ',' || TO_CHAR(d.dtime_day, 'MM/dd/yyyy')
       || ',' || NVL(o.cnt_opened, 0) --as cnt_opened
       || ',' || NVL(c.cnt_closed, 0) --as cnt_closed
FROM owner_dwh.dc_date d
  LEFT JOIN ( SELECT
                TRUNC(t.create_time, 'MM') AS report_date,
                count(*)                   AS cnt_opened
                FROM app_account.otrs_ticket t
               WHERE t.create_time BETWEEN SYSDATE - 365 AND SYSDATE
               GROUP BY TRUNC(t.create_time);
            ) o ON d.DTIME_DAY=o.REPORT_DATE
  LEFT JOIN ( SELECT TRUNC(t.CLOSE_TIME, 'MM') AS report_date,
                     count(*)                  AS cnt_closed
                FROM APP_ACCOUNT.OTRS_TICKET t
               WHERE t.CLOSE_TIME BETWEEN SYSDATE -365 AND SYSDATE
               GROUP BY TRUNC(t.CLOSE_TIME);
          ) c ON D.DTIME_DAY= C.REPORT_DATE
WHERE d.DTIME_DAY BETWEEN SYSDATE -365 AND SYSDATE
ORDER BY D.DTIME_DAY;
EN

回答 1

Stack Overflow用户

发布于 2014-01-24 16:43:27

您必须按SELECT子句中使用的相同表达式进行分组。

因此,如果您:

代码语言:javascript
复制
SELECT TRUNC(t.CREATE_TIME, 'MM') AS report_date,count(*) AS cnt_opened

..。那你就得..。

代码语言:javascript
复制
GROUP BY TRUNC(t.CREATE_TIME,'MM')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21327979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档