暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如果数据库中没有记录,与Date列组合,如何显示零作为盘点?

askTom 2016-08-31
117

问题描述

你好,

执行查询月从APR开始到SEP后,数据库中只有数据可用,并且显示正确。
如果没有数据,我想显示月和计数为0 ,相同的结果。
例如:这里一月(01)月在数据库中没有记录,应该显示如下,类似十二月(12)月。

年月合计_PAGE_VISITOR
2015年01月0日
2015年2月8日
2015年03月176日
2015年04月369日
2015年05月130日
2015年06月148日
2015年07月296
2015年08月44日
2015年09月44日
2015年11 38
2015年12 0

SELECT to_char ( Cns.Requestdate,'YYYY')作为年份, to_char ( Cns.Requestdate,'MM')作为月,总计(页面访问者) AS TOTAl_PAGE_VISITOR来自短ID Sh
内部连接计数器名Cn ON Sh.Id = Cn.Shortid_id
内部连接计数器名_摘要Cns ON Cn.Id = Cns.计数器名_Id
内部连接国家/地区代码Cd ON Cd.Id = Cn.国家/地区代码Id
凡Cns.Page访问者不为NULL AND to_char ( Cns.Requestdate,'YYYY') ='2015'
AND Sh.Shortid ,如“%wcms_bnn_-news_详细信息_page-%”
GROUP BY to_char ( Cns.Requestdate,'YYYY') ,TO_CHAR ( Cns.Requestdate,'MM')
按TO_CHAR ( Cns.Requestdate,'MM')排序ASC ;

如何修改查询,以获得有月份和年份的计数中的0 ?
谢谢你。

如何获取

专家解答

首先,我们将创建一个“缺少”几个月的表


SQL> drop table t purge;

Table dropped.

SQL>
SQL> create table t as
  2  select rownum r, add_months(date '2016-01-01',rownum-1) dte, ceil(dbms_random.value(0,100)) amt
  3  from dual
  4  connect by level <= 12;

Table created.

SQL>
SQL> select * from t;

         R DTE              AMT
---------- --------- ----------
         1 01-JAN-16         25
         2 01-FEB-16         69
         3 01-MAR-16          9
         4 01-APR-16         45
         5 01-MAY-16         47
         6 01-JUN-16         78
         7 01-JUL-16         30
         8 01-AUG-16         64
         9 01-SEP-16         19
        10 01-OCT-16         36
        11 01-NOV-16         93
        12 01-DEC-16         17

12 rows selected.

SQL>
SQL> delete from t
  2  where  r in ( 1,4,6 );

3 rows deleted.

SQL>
SQL> select * from t;

         R DTE              AMT
---------- --------- ----------
         2 01-FEB-16         69
         3 01-MAR-16          9
         5 01-MAY-16         47
         7 01-JUL-16         30
         8 01-AUG-16         64
         9 01-SEP-16         19
        10 01-OCT-16         36
        11 01-NOV-16         93
        12 01-DEC-16         17

9 rows selected.


要填充空白,我们需要一个具有完整12个月的对象,以便我们可以从它到“T”的外部连接。但是我们刚刚看到了如何生成12个月的行,因此我们可以使用相同的概念:


SQL>
SQL>
SQL> with all_the_months as
  2  (
  3    select add_months(date '2016-01-01',rownum-1) mth
  4    from dual
  5    connect by level <= 12
  6  )
  7  select a.mth, nvl(t.amt,0)
  8  from   t,
  9         all_the_months a
 10  where  a.mth = t.dte(+)
 11  order by 1;

MTH       NVL(T.AMT,0)
--------- ------------
01-JAN-16            0
01-FEB-16           69
01-MAR-16            9
01-APR-16            0
01-MAY-16           47
01-JUN-16            0
01-JUL-16           30
01-AUG-16           64
01-SEP-16           19
01-OCT-16           36
01-NOV-16           93
01-DEC-16           17

12 rows selected.

SQL>



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论