日期:2014-05-17 浏览次数:20798 次
----------------------- 表1 ----------------------- 同一ID有多种甚至上百种物种.ID不是物种编号,而是顾客唯一标识.VISIT_NO是提货次数. T_DATE VISIT_NO ID ITEM_NAME SPEC AMOUNT UNITS 2008-6-1 14:43 1 00001 灯泡 100W 2 只 2008-7-4 14:43 1 00002 灯泡 100W 3 只 2008-7-4 14:43 1 00002 节能灯 50W 5 只 2008-7-4 14:43 1 00002 消毒灯 100W 3 只 2008-7-5 14:43 2 00003 灯泡 100W 4 只 //注意① 2008-7-5 14:43 2 00003 节能灯 100W 7 只//注意② 2008-7-5 14:43 2 00003 消毒灯 100W 8 只//注意③ 2008-7-6 14:43 1 00004 灯泡 100W 5 只 2008-7-7 14:43 2 00005 灯泡 100W 6 只 2008-7-8 14:43 1 00006 灯泡 100W 3 只 ----------------------- 表2 ----------------------- 表1中有//注意①,表2没有,当出现这类情况时,则转向表3取值.以a3.t_date和a3.id关联. 注意:每天日期时间是不同的.但又必须有时间段约束.不然把除本月之外的相同ID也会一 并提取统计进来. WW_DATE VISIT_NO TEXT NAME ID 2008-6-1 14:43 1 灯泡 李1 00001 2008-1-4 8:43 1 灯泡 李2 00002 2008-1-4 8:43 1 节能灯 李2 00002 2008-1-4 8:43 1 消毒灯 李2 00002 2008-1-5 8:43 2 节能灯 李3 00003 //注意② 2008-1-5 8:43 2 消毒灯 李3 00003 //注意③ 2008-1-6 8:43 1 灯泡 李4 00004 2008-1-7 8:43 2 灯泡 李2 00005 2008-1-8 8:43 1 灯泡 李6 00006 ----------------------- 表3 ----------------------- 注意:每天日期时间是不同的.但又必须做为限制条件.不然把除本月之外的相同ID也会一并提取统计进来,因此不能没有时间约束. ID VISIT_NO EE_DATE NAME 00001 1 2008-6-1 14:43 李1 00002 1 2008-1-4 10:21 李2 00003 2 2008-1-5 10:21 李3 00004 1 2008-1-6 10:21 李4 00005 2 2008-1-7 10:21 李2 00006 1 2008-1-8 10:21 李6 00007 1 2008-1-9 10:21 李2 00008 1 2008-1-10 10:21 李2 00009 1 2008-1-11 10:21 李9 00010 1 2008-1-12 10:21 李2 00011 1 2008-1-13 10:21 李4 00012 1 2008-1-14 10:21 李4 00013 1 2008-1-15 10:21 李2 00014 1 2008-1-16 10:21 李1 00015 1 2008-1-17 10:21 李3 ----------------------- 最终结果生成表4 ----------------------- 表4日期格式:YYYY-MM. T_DATE NAME ITEM_NAME SPEC AMOUNT UNITS 2008-07 李1 灯泡 100w 33 只 2008-07 李2 灯泡 100w 53 只 2008-07 李3 灯泡 100w 40 只 2008-07 李4 灯泡 100w 17 只 2008-07 李5 灯泡 100w 8 只 2008-07 李6 灯泡 100w 3 只 2008-07 李8 灯泡 100w 3 只 当向表2取NAME值无效,或不存在时,转取表3。 手边有个表1关联表2的,或请朋友们给改写成关联表3的 【句一】 select to_char(a1.t_date,'yyyy-mm') t_date, a2.name, a1.item_name, a1.spec, to_char(sum(to_number(substr(amount,1,length(amount-1)))))amount,units from table1 a1,table2 a2 where to_char(a1.t_date, 'yyyy-mm-dd') = to_char(a2.ww_date, 'yyyy-mm-dd') and a1.ITEM_NAME = a2.TEXT and a1.visit_no =a2.visit_no and a1.ID=a2.ID and a1.t_date between to_date('2008-7-1','yyyy-mm-dd') and to_date('2008-7-31','yyyy-mm-dd')+0.99999 and a1.item_name = '灯泡' ; group by to_char(a1.t_date,'yyyy-mm'), a2.name, a1.item_name, a1.spec, units 【句二】 select to_char(t1.t_date, 'yyyy-mm') t_date, t2.name, t1.item_name, t1.spec, sum(to_number(substr(amount, 1, length(amount - 2)))) amount, t1.units from table1 t1, table2 t2 where to_char(t1.t_date, 'yyyy-mm-dd') = to_char(t2.ww_date, 'yyyy-mm-dd') and a1.ITEM_NAME = a2.TEXT and a1.visit_no =a2.visit_no and a1.ID=a2.ID and to_char(t1.t_date, 'yyyy-mm-dd') >= '2008-07-1' and to_char(t1.t_date, 'yyyy-mm-dd') <= '2008-07-31' and a1.item_name = '灯泡' ; group by to_char(t1.t_date, 'yyyy-mm'),