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

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

------解决方案--------------------
用动态sql就可以,例如:EXECUTE IMMEDIATE ‘DELETE sale_table WHERE saleprice’
------解决方案--------------------
reject_table
.saleprice
------解决方案--------------------
需要用个循环语句,对reject_table表中的条件,一个一个的执行提出操作
------解决方案--------------------
要分割到是很简单, LTRIM('>=765','<>='),RTRIM('>=765','0123456789')就可以了,这是这样你也用不到sql里面啊
------解决方案--------------------
有个比较笨的方法,用游标,我想去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出来的,不晓得可以用么.哈哈
------解决方案--------------------
神仙一样的表设计。
具体可以这么办  用sign(数量字段-去掉">"销售额字段) 如果是等于关系 这个表达式为0 如果是大于关系,这个值为1。

decode(instr('>700','>',),0,sign(数量字段-substr('>700',1)),sign(数量字段-substr('>700',2)))=decode(instr('>700','>',),0,0,1)


------解决方案--------------------
原来只有一个字段有大于号啊,那简单了

where 
sign(数据-regexp_replace(条件,'[>=]')+decode(regexp_replace(条件,'[^>=]'),'>=',0.001,0))=1

上面的表达式,吻合返回1,否则返回0或者-1