oracle数据库的查询问题

深远浅随 2018-05-28 08:47:57
10g的版本,有一个表其中有一列日期和一列数量,查询时能做到日期列根据对应数量列依次递增出,不影响表中的数据。
...全文
1442 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
深远浅随 2018-06-06
  • 打赏
  • 举报
回复
现在我只能分两次查:一日一次或者一日两次,我想一次性查出这两种效果
深远浅随 2018-06-06
  • 打赏
  • 举报
回复
版主大大,最后最后一个问题。就是你前两次根据数量分隔日期,怎么同时查出这两种效果: 日期列 数量列 次数 姓名 2018-1-1 2 一天一次 张三 2018-1-10 4 一天一次 李四 2018-1-15 4 一天两次 王二 2018-1-17 4 一天两次 赵五 变成 日期列 数量列 次数 姓名 2018-1-1 1 一天一次 张三 2018-1-2 1 一天一次 张三 2018-1-10 1 一天一次 李四 2018-1-11 1 一天一次 李四 2018-1-12 1 一天一次 李四 2018-1-13 1 一天一次 李四 2018-1-15 1 一天两次 王二 2018-1-15 1 一天两次 王二 2018-1-16 1 一天两次 王二 2018-1-16 1 一天两次 王二
卖水果的net 2018-05-30
  • 打赏
  • 举报
回复


SQL> 
SQL> create table test(crdate date, num int);
Table created
SQL> begin
  2      insert into test values(date'2018-1-1',  2);
  3      insert into test values(date'2018-1-10', 7);
  4  end;
  5  /
PL/SQL procedure successfully completed
SQL> col num format a5;
SQL> select crdate, crdate + (level - 1) / 2 new_date, num
  2    from test
  3  connect by prior rowid = rowid
  4         and prior dbms_random.value is not null
  5         and level <= num;
CRDATE      NEW_DATE      NUM
----------- ----------- -----
2018-01-01  2018-01-01      2
2018-01-01  2018-01-01      2
2018-01-10  2018-01-10      7
2018-01-10  2018-01-10      7
2018-01-10  2018-01-11      7
2018-01-10  2018-01-11      7
2018-01-10  2018-01-12      7
2018-01-10  2018-01-12      7
2018-01-10  2018-01-13      7
9 rows selected
SQL> drop table test purge;
Table dropped

SQL> 
深远浅随 2018-05-30
  • 打赏
  • 举报
回复
还是和之前的一样,就是上次是日期根据数量的多少依次递增+1天,变成依次递增+1/2天 日期 数量 2018-1-3 4 变成 日期 数量 2018-1-3 1 2018-1-3 1 2018-1-4 1 2018-1-4 1
深远浅随 2018-05-29
  • 打赏
  • 举报
回复
谢谢版主,现在还想达到一个要求比如: 日期列 数量列 2018-1-1 2 2018-1-10 4 日期列 数量列 2018-1-1 1 2018-1-1 1 2018-1-10 1 2018-1-10 1 2018-1-11 1 2018-1-11 1 其实就是把之前那个1天加减变成半天加减,我试过1/2不能达到效果呢
卖水果的net 2018-05-29
  • 打赏
  • 举报
回复
没看明白,你用 excel 画一下你的预期结果。
nayi_224 2018-05-28
  • 打赏
  • 举报
回复
with tab as( select 1 id, to_date('2018-01-01', 'yyyy-mm-dd') dat, 2 num from dual union all select 2 id, to_date('2018-01-10', 'yyyy-mm-dd'), 4 from dual ) select t1.dat + level - 1 dat, 1 num from tab t1 connect by prior t1.id = t1.id and level <= num and prior sys_guid() is not null;
卖水果的net 2018-05-28
  • 打赏
  • 举报
回复

SQL> 
SQL> create table test(crdate date, num int);
Table created
SQL> begin
  2      insert into test values(date'2018-1-1',  2);
  3      insert into test values(date'2018-1-10', 4);
  4  end;
  5  /
PL/SQL procedure successfully completed
SQL> col num format a5;
SQL> select crdate, crdate + level - 1 new_date, num
  2    from test
  3  connect by prior rowid = rowid
  4         and prior dbms_random.value is not null
  5         and level <= num;
CRDATE      NEW_DATE      NUM
----------- ----------- -----
2018-01-01  2018-01-01      2
2018-01-01  2018-01-02      2
2018-01-10  2018-01-10      4
2018-01-10  2018-01-11      4
2018-01-10  2018-01-12      4
2018-01-10  2018-01-13      4
6 rows selected
SQL> drop table test purge;
Table dropped

SQL> 
深远浅随 2018-05-28
  • 打赏
  • 举报
回复
深远浅随 2018-05-28
  • 打赏
  • 举报
回复
我的意思是 日期列 数量列 2018-1-1 2 2018-1-10 4 可以在查询的时候变成 日期列 数量列 2018-1-1 1 2018-1-2 1 2018-1-10 1 2018-1-11 1 2018-1-12 1 2018-1-13 1
卖水果的net 2018-05-28
  • 打赏
  • 举报
回复
sum(数量) over(order by 日期)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧