请高手们帮看一下这个ORACLE查询语句的写法.
我传了个表在附件.问题描述太罗嗦了~oracledbalgtu  hebo2005  dbcxbj 三位老师若是来了一定不要走,帮看看.谢谢了%

解决方案 »

  1.   

     
     
    该帖包含附件:http://d.download.csdn.net/down/573098/iuu54321
     
      

  2.   

    and a1.name = a2.b_name
    a1
    是哪张表,sheet1里没有该字段,SHEET2里有
    B_NAME几张表中都没有
      

  3.   

    你的三张表的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 
      

  4.   

    回hebo2005 老师:
    是笔误
    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
      

  5.   

    也就是你表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 
      

  6.   

    [Quote=引用 5 楼 iuu54321 的回复:]
    回hebo2005 老师: 
    是笔误 
    and a1.name = a2.name 
    应该是 
        and a1.name = a2.name 
     
      

  7.   

    要写上时间日期的关联条件么 hebo 老师,不然会把表2中基本月份的,a2.id=a1.id,或a2.item_name = a1.item_name都统计进来的吧!!
      

  8.   

    要写上时间日期的关联条件么 hebo 老师,不然会把表2中非本月份的,a2.id=a1.id,或a2.item_name = a1.item_name都统计进来的吧!!有时候顾客是会在同一批次跨月提货的,这里可能是举得例子记录比较少,就是说6月25号开始提货,可能要延续到7月甚至8月,而统计是要月份来统计.