有一个表有两个字段, dt(日期) 和 value(整型), 假设有如下资料
dt value
-------------------------
2005-01-01 10
2005-01-10 20
2005-01-23 15
2005-01-26 23
------------------------
如上, 现在我给出一个日期区间, 比如 dt between to_date('2005-01-01') and between to_date('2005-01-30'), 也就是一个月的时间, 要求列出区间内每一天的 value, 如果该天没有数据, 则为0, 这条SQL 怎么写要求的结果
dt value
-------------------------
2005-01-01 10
2005-01-02 0
2005-01-03 0
..........等
2005-01-10 20
2005-01-11 0
..........
2005-01-23 15
2005-01-26 23
2005-01-27 0
2005-01-28 0
------------------------
dt value
-------------------------
2005-01-01 10
2005-01-10 20
2005-01-23 15
2005-01-26 23
------------------------
如上, 现在我给出一个日期区间, 比如 dt between to_date('2005-01-01') and between to_date('2005-01-30'), 也就是一个月的时间, 要求列出区间内每一天的 value, 如果该天没有数据, 则为0, 这条SQL 怎么写要求的结果
dt value
-------------------------
2005-01-01 10
2005-01-02 0
2005-01-03 0
..........等
2005-01-10 20
2005-01-11 0
..........
2005-01-23 15
2005-01-26 23
2005-01-27 0
2005-01-28 0
------------------------
解决方案 »
- 急急! 在线急等,关于JOB问题!
- T-Sql转PL-Sql
- 那位大侠会用pl/sql develop,请问怎样让查询出来的结果显示在一行上呢?
- raise语句的作用?
- SQL Server 2005 转到 Orcale数据库
- sql优化,在线等
- PL/SQL显式游标为什么没有推进.
- 关于修改spfile中参数的疑问,请大家帮我看看
- 新手提问:关于符合键字的查询问题,高手请指点啊!!真的急啊,过年都没休息的加班啊......
- 我在pl/sql里面动态建立一个表,但我在程序里面访问这个表时,就会发生编译错误..
- 如果给定用户名称和 密码,怎么得到它下面的所有的表的名称?
- 这个instead of 触发器有问题吗,郁闷!
(
select dt from (
select to_date('2005-01-01', 'yyyy-mm-dd')+rownum-1 dt from dual
connect by rownum<=to_date('2005-01-30', 'yyyy-mm-dd')-to_date('2005-01-01', 'yyyy-mm-dd') + 1)
) dateList,t1
where dateList.dt = t1.dt(+)
2 (
3 DAT DATE,
4 VALUE VARCHAR2(10)
5 )
6 /Table createdSQL> insert into testtab values(to_date('2005-01-01','yyyy-mm-dd'),'aa');1 row insertedSQL> commit;Commit completeSQL> insert into testtab values(to_date('2005-01-10','yyyy-mm-dd'),'bb');1 row insertedSQL> commit;Commit completeSQL> insert into testtab values(to_date('2005-01-05','yyyy-mm-dd'),'cc');1 row insertedSQL> commit;Commit completeSQL> select * from testtab;DAT VALUE
----------- ----------
2005-1-1 aa
2005-1-10 bb
2005-1-5 ccSQL> SELECT B.日期, A.VALUE
2 FROM (SELECT TO_CHAR(DAT, 'yyyy-mm-dd') DAT, VALUE FROM TESTTAB) A,
3 (
4 SELECT TO_CHAR(TO_DATE('2005-01-01', 'yyyy-mm-dd') + (ROWNUM - 1),
5 'yyyy-mm-dd') 日期
6 FROM ALL_OBJECTS
7 WHERE ROWNUM < 367
8 AND TO_DATE('2005-01-01', 'yyyy-mm-dd') + (ROWNUM - 1) <=
9 TO_DATE('2005-01-28', 'yyyy-mm-dd')
SQL> ) B
2 WHERE A.DAT(+) = B.日期
3 /) B
WHERE A.DAT(+) = B.日期ORA-00900: 无效 SQL 语句SQL>
SQL> SELECT B.日期, nvl(A.VALUE,0)
2 FROM (SELECT TO_CHAR(DAT, 'yyyy-mm-dd') DAT, VALUE FROM TESTTAB) A,
3 (SELECT TO_CHAR(TO_DATE('2005-01-01', 'yyyy-mm-dd') + (ROWNUM - 1),
4 'yyyy-mm-dd') 日期
5 FROM ALL_OBJECTS
6 WHERE ROWNUM < 367
7 AND TO_DATE('2005-01-01', 'yyyy-mm-dd') + (ROWNUM - 1) <=
8 TO_DATE('2005-01-28', 'yyyy-mm-dd')) B
9 WHERE A.DAT(+) = B.日期
10 /日期 NVL(A.VALUE,0)
---------- --------------
2005-01-01 aa
2005-01-02 0
2005-01-03 0
2005-01-04 0
2005-01-05 cc
2005-01-06 0
2005-01-07 0
2005-01-08 0
2005-01-09 0
2005-01-10 bb
2005-01-11 0
2005-01-12 0
2005-01-13 0
2005-01-14 0
2005-01-15 0
2005-01-16 0
2005-01-17 0
2005-01-18 0
2005-01-19 0
2005-01-20 0日期 NVL(A.VALUE,0)
---------- --------------
2005-01-21 0
2005-01-22 0
2005-01-23 0
2005-01-24 0
2005-01-25 0
2005-01-26 0
2005-01-27 0
2005-01-28 028 rows selectedSQL>