小弟新手,今天在统计销售额是碰到问题了,一张销售表sale_table,一张剔除条件表reject_table
销售表中有一个金额saleprice,值是700、3700、5000等直接数字表示的,而剔除表中中也有一个saleprice
值却是>700、>=3700、>5000的字符串表示,要求出销售表按剔除表剔除后一号到五号每天的销售额,其他条件我都写好了,但是怎么比较700和>700啊,我试了很多方法,想把剔除表中saleprice拆分在成符号和钱数和销售表中钱进行比较,但是都没有成功,各位大大们求解怎么办啊,新人,分不多,求关照连表查询、拆分字符串、统计销售额

解决方案 »

  1.   

    用动态sql就可以,例如:EXECUTE IMMEDIATE ‘DELETE sale_table WHERE saleprice’||reject_table
    .saleprice
      

  2.   

    需要用个循环语句,对reject_table表中的条件,一个一个的执行提出操作
      

  3.   

    能写个具体的例子吗,没有函数直接能拆分?前面的联合条件已经很多了,用动态SQL语句怎么写啊,会不会很麻烦啊
      

  4.   

    要分割到是很简单, LTRIM('>=765','<>='),RTRIM('>=765','0123456789')就可以了,这是这样你也用不到sql里面啊
      

  5.   

    有个比较笨的方法,用游标,我想去saleprice表查找应该用一些字段关联吧,应该sale_table表中也有相同的字段,因为手上也没有环境,YY下declare
    sql varchar2(1000);
    cursor rejecttable is 
    select * from rejecttable;
    recs rejecttable%rowtype;
    begin
    for recs in rejecttable loop
    --最好用一个临时表来记录假设临时表结果和sale_table结构一样
    sql:='insert into temp select * from sale_table where 字段1='||recs.字段1||' 字段2='||recs.字段2||' saleprice'||recs.saleprice;
    execute immediate sql;
    end loop;
    end; 类似就是这样吧,像前面说的用动态sql,动态sql说实话就是先将你要执行的语句拼成一个完整的sql
    然后execute immediate执行就好了,这个是YY出来的,不晓得可以用么.哈哈
      

  6.   

    神仙一样的表设计。
    具体可以这么办  用sign(数量字段-去掉">"销售额字段) 如果是等于关系 这个表达式为0 如果是大于关系,这个值为1。decode(instr('>700','>',),0,sign(数量字段-substr('>700',1)),sign(数量字段-substr('>700',2)))=decode(instr('>700','>',),0,0,1)
      

  7.   

    原来只有一个字段有大于号啊,那简单了where 
    sign(数据-regexp_replace(条件,'[>=]')+decode(regexp_replace(条件,'[^>=]'),'>=',0.001,0))=1上面的表达式,吻合返回1,否则返回0或者-1
      

  8.   

    4楼的办法好啊,用substr取出的值貌似不能当做判断条件,这个却可以,目前用这个问题已经解决了,虽然写的很麻烦。。谢谢四楼了