2014-02-17 13 views
0

我是Oracle SQL中的新手。我试图显示门票的名称,关闭和打开门票的数量和日期。但我无法得到正确的查询。如何将数据分组到一列中?

所需的输出:

01/20/2014, User management, 20, 15 

查询:

SELECT 'Data' 
||','||TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy') 
||','||q.name -- as ticket 
||','||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 q.name, count(q.name), TRUNC(t.CREATE_TIME) as report_date, count(*) as cnt_opened 
FROM APP_ACCOUNT.OTRS_TICKET t 
left join app_account.otrs_queue q 
ON q.ID = t.QUEUE_ID 
WHERE t.CREATE_TIME BETWEEN SYSDATE -7 AND SYSDATE -1 
and t.queue_id not in (63, 61, 69, 59, 58, 60, 56, 64, 65, 23, 67, 68, 57) 
GROUP BY q.name, TRUNC(t.CREATE_TIME) 
) o ON d.DTIME_DAY=o.REPORT_DATE 
LEFT JOIN (
SELECT q.name, count(q.name), TRUNC(t.CLOSE_TIME) as report_date,count(*) AS cnt_closed 
FROM APP_ACCOUNT.OTRS_TICKET t 
left join app_account.otrs_queue q 
ON q.ID = t.QUEUE_ID 
WHERE t.CLOSE_TIME BETWEEN SYSDATE -7 AND SYSDATE -1 
and t.queue_id not in (63, 61, 69, 59, 58, 60, 56, 64, 65, 23, 67, 68, 57) 
GROUP BY q.name, TRUNC(t.CLOSE_TIME) 
) c ON D.DTIME_DAY=c.REPORT_DATE 
WHERE d.DTIME_DAY BETWEEN SYSDATE -7 AND TRUNC(SYSDATE) -1 
AND TRUNC(d.DTIME_DAY)= d.DTIME_DAY 
ORDER BY D.DTIME_DAY; 

如果我想对数据进行分组?

实例:在一列,让我们说我有:

E-mail management 
E-mail management::Add user e-mail 
E-mail management::Add new Outlook distribution list 
E-mail management::Add new Outlook shared mailbox 
E-mail management::Add new SA e-mail (Zimbra account) 
POS::POS issue - need paper 
POS::POS issue - internet connection problems 

有电子邮件管理的所有名称将组作为电子邮件的管理和具有POS将组作为POS所有名称。

欲望输出:

02/10/2014, E-mail, 4 
    02/10/2014, POS, 2 

如何做到这一点?

请帮帮我。先谢谢你。

回答

0

你可以做这样的:

group by substr(col, 1, instr(col, ':') - 1) 

group by (case when col like '%:%' then substr(col, 1, instr(col, ':') - 1) 
       else col 
      end) 

当然,你必须解决:

group by (case when col like 'E-mail management:%' then 'E-mail management' 
       when col like 'pos:%' then 'pos' 
       else col 
      end) 

要由部分冒号前聚集select子句与group by子句兼容。

编辑:

要统计组的数量,你会做这样的事情:

select (case when col like '%:%' then substr(col, 1, instr(col, ':') - 1) 
      else col 
     end), count(*) 
from table t 
group by (case when col like '%:%' then substr(col, 1, instr(col, ':') - 1) 
       else col 
      end) 
+0

我如何能显示日期本身? – user3317540

+0

您必须使用聚合函数,例如'min()'或'list_agg()'。 –

+0

该怎么做? – user3317540

相关问题