and a1.name = a2.b_name a1 是哪张表,sheet1里没有该字段,SHEET2里有 B_NAME几张表中都没有
你的三张表的ID都是唯一的吧 而且都是一一对应的吧 那实际上关联ID足够了select to_char(a.T_DATE,'yyyy-mm') t_date,nvl(a2.name,a3.name) name, a1.item_name,a1.spec,sum(a1.amount) amount,a1.unit from a1,a2,a3 where a1.id=a2.id and a1.id=a3.id and a1.item_name = '灯泡' and a1.t_date between to_date('2008-7-1','yyyy-mm-dd') and to_date('2008-7-31','yyyy-mm-dd')+0.99999 group by to_char(a.T_DATE,'yyyy-mm'),nvl(a2.name,a3.name),a1.item_name,a1.spec,a1.unit
也就是你表1和表2的pk是no+item_name 而表3的PK是ID 即表1和表3的id是有重复的,但加上item_name就不会有重复表1的数据是最select to_char(a.T_DATE,'yyyy-mm') t_date,nvl(a2.name,a3.name) name, 现表2的数据没有和表1的数据相关联的,但表3和表1只是id相关联,全的,有可能出a1.item_name,a1.spec,sum(a1.amount) amount,a1.unit from a1,a2,a3 where a1.id=a2.id(+) and a1.item_name = a2.item_name(+) and a1.id=a3.id and a1.item_name = '灯泡' and a1.t_date between to_date('2008-7-1','yyyy-mm-dd') and to_date('2008-7-31','yyyy-mm-dd')+0.99999 group by to_char(a.T_DATE,'yyyy-mm'),nvl(a2.name,a3.name),a1.item_name,a1.spec,a1.unit
[Quote=引用 5 楼 iuu54321 的回复:] 回hebo2005 老师: 是笔误 and a1.name = a2.name 应该是 and a1.name = a2.name
该帖包含附件:http://d.download.csdn.net/down/573098/iuu54321
a1
是哪张表,sheet1里没有该字段,SHEET2里有
B_NAME几张表中都没有
而且都是一一对应的吧
那实际上关联ID足够了select to_char(a.T_DATE,'yyyy-mm') t_date,nvl(a2.name,a3.name) name,
a1.item_name,a1.spec,sum(a1.amount) amount,a1.unit
from a1,a2,a3
where a1.id=a2.id
and a1.id=a3.id
and a1.item_name = '灯泡'
and a1.t_date between to_date('2008-7-1','yyyy-mm-dd')
and to_date('2008-7-31','yyyy-mm-dd')+0.99999
group by to_char(a.T_DATE,'yyyy-mm'),nvl(a2.name,a3.name),a1.item_name,a1.spec,a1.unit
是笔误
and a1.name = a2.name
应该是
where to_char(t1.t_date, 'yyyy-mm-dd') = to_char(t2.t_date, 'yyyy-mm-dd')
and a1.id=a2.id=a3.id
and a1.name = a2.b_name
and a1.visit_no=a2.visit_no
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 = '灯泡' ; 表1表2表3中的ID在限定时间为>=2008-07-01, <=2008-07-31,并且表1表2中的item_name绝对='灯泡'时才会是唯一的.a1.visit_no=a2.visit_no我个人觉得可以充作一个辅助意义的条件.不起主导作用.
实际情况会是这样:-----------------------
表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 只
-----------------------
表1
-----------------------
由于记账方式不同,会出现表1表2记录不同(这是正常的需要)请看"//注意",
表1中存在id=0003,ITEM_NAME=灯泡,而表2中却出现,有00003的ID,却没有2008-1-5 8:43|2|灯泡|李3|00003
类似纪录时.当出现这类情况时,则转向表3取值.以a3.t_date和a3.id做对应关联.注意:每天日期时间是不同的.但又必须做为限制条件.不然把除本月之外的相同ID也会一并提取统计进来,因此不能没有时间约束.
T_DATE VISIT_NO ITEM_NAME 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 T_DATE NAME
00001 2008-6-1 14:43 李1
00002 2008-1-4 10:21 李2
00003 2008-1-5 10:21 李3
00004 2008-1-6 10:21 李4
00005 2008-1-7 10:21 李2
00006 2008-1-8 10:21 李6
00007 2008-1-9 10:21 李2
00008 2008-1-10 10:21 李2
00009 2008-1-11 10:21 李9
00010 2008-1-12 10:21 李2
00011 2008-1-13 10:21 李4
00012 2008-1-14 10:21 李4
00013 2008-1-15 10:21 李2
00014 2008-1-16 10:21 李1
00015 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 只
157
而表3的PK是ID
即表1和表3的id是有重复的,但加上item_name就不会有重复表1的数据是最select to_char(a.T_DATE,'yyyy-mm') t_date,nvl(a2.name,a3.name) name,
现表2的数据没有和表1的数据相关联的,但表3和表1只是id相关联,全的,有可能出a1.item_name,a1.spec,sum(a1.amount) amount,a1.unit
from a1,a2,a3
where a1.id=a2.id(+)
and a1.item_name = a2.item_name(+)
and a1.id=a3.id
and a1.item_name = '灯泡'
and a1.t_date between to_date('2008-7-1','yyyy-mm-dd')
and to_date('2008-7-31','yyyy-mm-dd')+0.99999
group by to_char(a.T_DATE,'yyyy-mm'),nvl(a2.name,a3.name),a1.item_name,a1.spec,a1.unit
回hebo2005 老师:
是笔误
and a1.name = a2.name
应该是
and a1.name = a2.name