问题描述
你好,
执行查询月从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 ?
谢谢你。
如何获取
执行查询月从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 ?
谢谢你。
如何获取
专家解答
首先,我们将创建一个“缺少”几个月的表
要填充空白,我们需要一个具有完整12个月的对象,以便我们可以从它到“T”的外部连接。但是我们刚刚看到了如何生成12个月的行,因此我们可以使用相同的概念:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




