★★★★★一个Select查询语句的问题:郁闷了好多天了!★★★★★

itperson 2004-12-30 03:23:12
我要查询一个字段,查询后的结果要对这个字段进行条件判断:

如果 FieldName的值<=500时返回 FieldName*0.05
如果 FieldName的值<=1500时返回 FieldName*0.15
如果 FieldName的值<=2500时返回 FieldName*0.25
如果 FieldName的值<=3500时返回 FieldName*0.35
如果 FieldName的值<=4500时返回 FieldName*0.45
如果 FieldName的值>4500时返回 FieldName*0.5


select ??? from 表

请问我的SQL语句该怎么写?

谢谢了
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
尚和空四 2005-01-05
  • 打赏
  • 举报
回复
条件查询语句
yorbo 2005-01-04
  • 打赏
  • 举报
回复
楼上,当然是分段啦 呵呵
yesyesyes 2004-12-31
  • 打赏
  • 举报
回复
楼主给出的条件有问题
<=500时,同时也<=1500,同时也<=2500,...,到底用哪个表达式呢?
user139 2004-12-31
  • 打赏
  • 举报
回复
少除个10,应该是
iif(x>4500,0.5,iif(Right(x,3)>500,CDbl(left(format(x,"0000"),1)/10+0.15,CDbl(left(format(x,"0000"),1)/10+0.05) ))

switch也许可以
changechange 2004-12-30
  • 打赏
  • 举报
回复
应该使用SWITCH 函数


Switch 函数


计算一组表达式列表的值,然后返回与表达式列表中最先为 True 的表达式所相关的 Variant 数值或表达式。

语法

Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])

Switch 函数的语法具有以下几个部分:

部分 描述
expr 必要参数。要加以计算的 Variant 表达式。
value 必要参数。如果相关的表达式为 True,则返回此部分的数值或表达式。



说明

Switch 函数的参数列表由多对表达式和数值组成。表达式是由左至右加以计算的,而数值则会在第一个相关的表达式为 True 时返回。如果其中有部分不成对,则会产生一个运行时错误。如果 expr-1 为 True 则 Switch 返回 value-1,如果 expr-1 为 False,但 expr-2 为 True,则 Switch 返回 value-2,以此类推。

Switch 会返回一个 Null值,如果:

没有一个表达式为 True。


第一个为 True 的表达式,其相对应的值为 Null。
虽然它只返回其中的一个值,但是 Switch 会计算所有的表达式。因此应该注意到所产生的副作用。例如,只要其中一个表达式导致被零除错误,就会发生错误。
user139 2004-12-30
  • 打赏
  • 举报
回复
iif(x>4500,0.5,iif(Right(x,3)>500,CDbl(left(format(x,"0000"),1)+0.15,CDbl(left(format(x,"0000"),1)+0.05) ))

试一下
itperson 2004-12-30
  • 打赏
  • 举报
回复
iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=0,0,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=500,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.05,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=2000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.1-25,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=5000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.15-125,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=20000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.2-375,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=40000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.25-1375,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=60000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.3-3375,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=80000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.35-6375,iif((yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)<=10000,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.4-10375,(yfgz-1100-zfgjj-ylbx-sybx-jbybf-dzf)*0.45-15375))))))))) AS grsds

我的是求个人所得税的,改成上面的语句了,不过感觉不是很爽,又长又乱的,谁还有好的方法?
amtyuranus 2004-12-30
  • 打赏
  • 举报
回复
access 不支持case when ... then 语句,所有楼上的楼上的是错的

你可以把它改成标准的iif语句来做。。。
oyljerry 2004-12-30
  • 打赏
  • 举报
回复
用CString中Format设置条件
返回后,直接计算
iswear428 2004-12-30
  • 打赏
  • 举报
回复
select case when FieldName<=500 then FieldName*0.05
case when FieldName<=1500 then FieldName*0.15
case when FieldName的值<=2500 then FieldName*0.25
case when FieldName的值<=3500 then FieldName*0.35
case when FieldName的值<=4500 then FieldName*0.45
case when FieldName的值>4500 then FieldName*0.5
end as FieldName
from youTable
itperson 2004-12-30
  • 打赏
  • 举报
回复
对了,我用的是Access数据库

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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