当前位置: 代码迷 >> Oracle管理 >> 按周展示库存状态数量
  详细解决方案

按周展示库存状态数量

热度:46   发布时间:2016-04-24 05:54:16.0
按周显示库存状态数量
1010101010018 需求量 0 2008-8-6 
1010101010018 需求量 12 2008-8-7 
1010101010018 需求量 0 2008-8-15 
1010101010018 需求量 60 2008-8-19 
1010101010018 采购订单 10 2008-8-6 
1010101010018 采购订单 10 2008-8-8 
1010101010018 采购订单 30 2008-8-17 
1010101010018 采购申请 2 2008-8-6 
1010101010018 采购申请 50 2008-8-11 
1010101010018 采购申请 50 2008-8-20 
上表是原始数据,想求一段代码得出如下结果: 
1010101010018 需求量 0 2008-8-6 
1010101010018 需求量 12 2008-8-13 
1010101010018 需求量 60 2008-8-20 
1010101010018 采购订单 10 2008-8-6 
1010101010018 采购订单 10 2008-8-13 
1010101010018 采购订单 30 2008-8-20 
1010101010018 采购申请 2 2008-8-6 
1010101010018 采购申请 50 2008-8-13 
1010101010018 采购申请 50 2008-8-20 
请大侠们给予帮助!定感激不进啊! 


------解决方案--------------------
除了少了1010101010018 需求量 0 2008-8-15 
没看出什么差别嘛
------解决方案--------------------
就是每周三显示,上周四到这周三的库存吗(这7天内有重复记录的取最后日期的数据)?
------解决方案--------------------
lz应该把示例数据改一下,以便可以说得清楚一点。
------解决方案--------------------
看不出来有什么规律..
同意3楼

------解决方案--------------------
如果lz的数据,上周四到这周三的库存至多有一天不是0,则可以用下边的sql实现,否则需要修改一下。
SQL code
create table testT (a char(13),b char(10),c number,d date)insert into testT values('1010101010018', '需求量',  0 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into testT values('1010101010018', '需求量',  12 ,   to_date('2008-8-7','YYYY-MM-DD'));insert into testT values('1010101010018', '需求量',  0 ,   to_date('2008-8-15','YYYY-MM-DD'));insert into testT values('1010101010018', '需求量',  60 ,   to_date('2008-8-19','YYYY-MM-DD'));insert into testT values('1010101010018', '采购订单',  10 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into testT values('1010101010018', '采购订单',  10 ,   to_date('2008-8-8','YYYY-MM-DD'));insert into testT values('1010101010018', '采购订单',  30 ,   to_date('2008-8-17','YYYY-MM-DD'));insert into testT values('1010101010018', '采购申请',  2 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into testT values('1010101010018', '采购申请',  50 ,   to_date('2008-8-11','YYYY-MM-DD'));insert into testT values('1010101010018', '采购申请',  50 ,   to_date('2008-8-20','YYYY-MM-DD'));SELECT   a, b, sum(c),         DECODE (SIGN (7 - (NEXT_DAY (d, '星期三') - d)),                 1, TO_CHAR (NEXT_DAY (d, '星期三'), 'YYYY-MM-DD'),                 TO_CHAR (d, 'YYYY-MM-DD')                )    FROM testtGROUP BY a,         b,         DECODE (SIGN (7 - (NEXT_DAY (d, '星期三') - d)),                 1, TO_CHAR (NEXT_DAY (d, '星期三'), 'YYYY-MM-DD'),                 TO_CHAR (d, 'YYYY-MM-DD')                );--结果:1010101010018 采购订单 10      2008-8-61010101010018 采购订单 10      2008-8-131010101010018 采购订单 30      2008-8-201010101010018 采购申请 2       2008-8-61010101010018 采购申请 50      2008-8-131010101010018 采购申请 50      2008-8-20 1010101010018 需求量  0        2008-8-61010101010018 需求量  12       2008-8-131010101010018 需求量  60       2008-8-20
------解决方案--------------------
估计你这个问题只能用存储过程或函数来解决了..
一个sql好象搞不定..

------解决方案--------------------
SQL code
方法如下:DROP TABLE test;create table test (a char(13),b char(10),c number,d date);insert into test  values('1010101010018', '需求量',  0 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into test  values('1010101010018', '需求量',  12 ,   to_date('2008-8-7','YYYY-MM-DD'));insert into test  values('1010101010018', '需求量',  0 ,   to_date('2008-8-15','YYYY-MM-DD'));insert into test  values('1010101010018', '需求量',  60 ,   to_date('2008-8-19','YYYY-MM-DD'));insert into test  values('1010101010018', '采购订单',  10 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into test  values('1010101010018', '采购订单',  10 ,   to_date('2008-8-8','YYYY-MM-DD'));insert into test  values('1010101010018', '采购订单',  30 ,   to_date('2008-8-17','YYYY-MM-DD'));insert into test  values('1010101010018', '采购申请',  2 ,   to_date('2008-8-6','YYYY-MM-DD'));insert into test  values('1010101010018', '采购申请',  50 ,   to_date('2008-8-11','YYYY-MM-DD'));insert into test  values('1010101010018', '采购申请',  50 ,   to_date('2008-8-20','YYYY-MM-DD'));COMMIT; SELECT A,       B,       SUM(C),       DECODE(MOD(TRUNC(D) - TRUNC(SYSDATE), 7),              0,              D,              TRUNC(SYSDATE) + 7 * (CEIL((TRUNC(D) - TRUNC(SYSDATE)) / 7))) X  FROM TEST GROUP BY A,          B,          DECODE(MOD(TRUNC(D) - TRUNC(SYSDATE), 7),                 0,                 D,                 TRUNC(SYSDATE) +                 7 * (CEIL((TRUNC(D) - TRUNC(SYSDATE)) / 7))) ORDER BY 1, 2, 4, 3; 输出:1010101010018    采购订单      10    2008-08-061010101010018    采购订单      10    2008-08-131010101010018    采购订单      30    2008-08-201010101010018    采购申请      2    2008-08-061010101010018    采购申请      50    2008-08-131010101010018    采购申请      50    2008-08-201010101010018    需求量        0    2008-08-061010101010018    需求量        12    2008-08-131010101010018    需求量        60    2008-08-20
  相关解决方案