首页 新闻 会员 周边

求oracle 高手写一个视图

0
悬赏园豆:30 [待解决问题]

有一个oracle表 t,有3列,第一列为标题,第二三列为日期。内容如下:

标题   开始日期    结束日期

title   start          end

A     2011/1/1   2011/1/5
B     2012/2/1   2012/2/5
C     2013/3/1   2013/3/7

随着公司业务的增长,表t会有更多的记录。


如何写一个视图,查询出的结果为如下:

title   day
A     2011/1/1
A     2011/1/2
A     2011/1/3
A     2011/1/4
A     2011/1/5
B     2012/2/1
B     2012/2/2
B     2012/2/3
B     2012/2/4
B     2012/2/5
C     2013/3/1
C     2013/3/2
C     2013/3/3
C     2013/3/4
C     2013/3/5
C     2013/3/6
C     2013/3/7


谢谢oracle高手大神~

create or replace view myview as 

 select?……

︶ㄣ第二名的主页 ︶ㄣ第二名 | 初学一级 | 园豆:147
提问于:2013-02-26 20:52
< >
分享
所有回答(3)
-1

CREATE TABLE t (    title       VARCHAR2 (10),    startdate   DATE,    enddate     DATE );

INSERT INTO t      VALUES ('A', DATE '2011-01-01', DATE '2011-01-05');

INSERT INTO t      VALUES ('B', DATE '2012-02-01', DATE '2012-02-05');

INSERT INTO t      VALUES ('C', DATE '2013-03-01', DATE '2013-03-07');

    SELECT title, startdate + LEVEL - 1 AS fday       FROM t   GROUP BY title, startdate, LEVEL CONNECT BY startdate + LEVEL - 1 <= enddate   ORDER BY startdate;

cl85 | 园豆:202 (菜鸟二级) | 2013-02-27 00:20

非常感谢你的回答。我验证了下结果是正确的。

可是还有个问题,就是startdate和enddate日期间隔天数较多时候,语句执行的很慢很慢,好几分钟也出不来结果。为什么呢,盼告知。

INSERT INTO t VALUES ('A', DATE '2013-01-05', DATE '2013-03-15');
INSERT INTO t VALUES ('B', DATE '2012-04-22', DATE '2012-06-10');
INSERT INTO t VALUES ('C', DATE '2012-02-12', DATE '2012-03-31');
INSERT INTO t VALUES ('D', DATE '2011-05-08', DATE '2011-06-20');
INSERT INTO t VALUES ('E', DATE '2011-02-27', DATE '2011-04-20');

如果表里的数据如以上所示,执行可慢了,出不了结果。为什么呢?谢谢。

支持(0) 反对(0) ︶ㄣ第二名 | 园豆:147 (初学一级) | 2013-02-27 09:10

@︶ㄣ第二名: 

这样的情况下建议考虑下面的方案:

一、修改表结构(现在的表结构数据量大的情况下,要用select查询出来性能很难解决)

二、利用存储过程(通过中间表来实现)

支持(0) 反对(0) cl85 | 园豆:202 (菜鸟二级) | 2013-02-27 15:40
1

我建议你建一个表,这个表只有日期,从2000-1-1到2020-12-31,表名tm,字段dt

select t.title,tm.dt from t left join tm on tm.dt between t.start and t.[end]

 

ps:我这是sqlserver,测试没问题,ssms显示运行时间为0秒

飞来飞去 | 园豆:2057 (老鸟四级) | 2013-02-27 10:08
0

建议不要在SQL处理这种数据,会出翔。完全可以交给表现层去做

CyrusLeo | 园豆:220 (菜鸟二级) | 2016-07-23 16:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册