日期:2014-05-17  浏览次数:20736 次

按周显示库存状态数量
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 testt
GROUP 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-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-6
1010101010018 需求量  12       2008-8-13
1010101010018 需求量  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_