update有难度

lihongf 2003-10-15 04:13:41
表a
ysxz tj bs
sh bfb<20% 2
sc bfb<=20% and bfb>10% 2
sc bfb<=30% and bfb>20% 4
sc bfb<=40% and bfb>30% 6
sc bfb>40% 8
...
表b
jsdm ysxz bfb bs ...
01-0001 sc 0.2
01-0002 sc 0.5
01-0003 sh 0.8
...
通过表b中的bfb字段值计算出表a中子段tj的值,将满足表a中tj的bs置给表b中的bs字段.是不是难了点?
...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-10-15
  • 打赏
  • 举报
回复
create table #表a(ysxz varchar(10),tj1 int,tj2 int,bs int)
insert #表a values('sh',20,0,2)
insert #表a values('sc',20,10,2)
insert #表a values('sc',30,20,4)
insert #表a values('sc',40,30,6)
insert #表a values('sc',100,40,8)

create table #表b(jsdm varchar(10),ysxz varchar(10),bfb numeric(10,1),bs int)
insert #表b values('01-0001' ,'sc', 0.2,null)
insert #表b values('01-0002' , 'sc' , 0.5,null)
insert #表b values('01-0003', 'sh' , 0.8,null)
select 0.2*100


update #表b set bs=(select #表a.bs from #表a where ysxz=#表b.ysxz and #表b.bfb*100<=tj1 and #表b.bfb*100>tj2)
select * from #表b

go
drop table #表b,#表a
CrazyFor 2003-10-15
  • 打赏
  • 举报
回复
转换成两列的方法不错,一列最大值,一列最小值就好处理了.
laker_tmj 2003-10-15
  • 打赏
  • 举报
回复
up learn
sinkiangscorpio 2003-10-15
  • 打赏
  • 举报
回复
这个办法不知道你认为怎么样,增加一个列,根据0.2,0.5,0.8,转换为bfb<=40% and bfb>30%
这种格式。
然后直接关联即可。
lihongf 2003-10-15
  • 打赏
  • 举报
回复
to crazyfor

如果换成0.2呢?


CrazyFor 2003-10-15
  • 打赏
  • 举报
回复
20%,在SQL也没有办法转换成0.2,你还不如保存20或0.2,如果不考虑这个%的问题,还是可以做的.
sdhdy 2003-10-15
  • 打赏
  • 举报
回复
tj字段设计的有问题,可以考虑用变通方法实现!
lovehwq21 2003-10-15
  • 打赏
  • 举报
回复
你a表的tj设计不合理,做不到吧
txlicenhe 2003-10-15
  • 打赏
  • 举报
回复
参考
http://expert.csdn.net/Expert/topic/2323/2323708.xml?temp=.2692224
gmlxf 2003-10-15
  • 打赏
  • 举报
回复
你的tj字段表达方式好象设计的不合理
这样就要先将tj字段转换成为一个范围如(a,b),不然后没法与表b中的bfb比较。

可以将tj转换以后是可以的,不过要判断好多,有点麻烦。
lihongf 2003-10-15
  • 打赏
  • 举报
回复
并且在表a表b中的ysxz相等的前提下update

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧