有一个表有两个字段, 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
------------------------
解决方案 »
- vmware 下面安装 LIUNX 报 PXE-MOF:EXITING INTEL PXE ROM.
- oracle中修改数据库的日期显示格式问题?
- DBMS_LOCK.SLEEP
- 紧急:.dmp文件如何导入到informix数据库中,或者从.dmp中提取原始SQL
- 求助:关于游标的使用(在不知道表结构的情况下使用游标)
- 如何在触发器中获取引发该触发器的SQL语句内的相应参数? 好急呀!!!
- Oracle Client 的 OracleMTSRecoveryService服务无法启动
- 哪位大神帮忙写个function???
- 能解决的,就是大虾,数据库批处理问题,走过路过进来看看!~
- databaselink 问题,求大虾指教
- 如果给定用户名称和 密码,怎么得到它下面的所有的表的名称?
- 这个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>