语法错误!

qq_42101986 2018-05-19 06:03:51
VB查询数据库,连接没问题,下面是我的查询语句,一直说有语法问题,求指教!

select 客户名称,客户ID,iif(注册资金 >= 800,'5',iif(注册资金 < 800 and 注册资金 >= 600,'4',iif(注册资金 < 600 and 注册资金>= 400,'3',iif(注册资金<400 and 注册资金 >= 200,'2','1')))) as 注册资金评分
from 客户基本信息
...全文
1249 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-06-11
  • 打赏
  • 举报
回复
引用 12 楼 chewinggum 的回复:
[quote=引用 11 楼 Chen8013 的回复:] 楼上这样,如何限定“注册资金评分”最大值为5呢?
所以应该采纳8楼的答案呗 标准语句 SQL server、access、oracle 都可以执行[/quote] 不过,我还有个疑问:  那个“结果”应该是整数1到5,我看你的写法,除法运算用的是 / ,而10楼的写法是 \ 。  你的写法,它的运算结果是整数吗?
舉杯邀明月 2018-06-11
  • 打赏
  • 举报
回复
引用 12 楼 chewinggum 的回复:
[quote=引用 11 楼 Chen8013 的回复:] 楼上这样,如何限定“注册资金评分”最大值为5呢?
所以应该采纳8楼的答案呗 标准语句 SQL server、access、oracle 都可以执行[/quote] 哦,你不说我还没注意。 估计你的写法可以吧。 但楼主不是我…………
脆皮大雪糕 2018-06-11
  • 打赏
  • 举报
回复
引用 11 楼 Chen8013 的回复:
楼上这样,如何限定“注册资金评分”最大值为5呢?
所以应该采纳8楼的答案呗 标准语句 SQL server、access、oracle 都可以执行
舉杯邀明月 2018-06-11
  • 打赏
  • 举报
回复
楼上这样,如何限定“注册资金评分”最大值为5呢?
of123 2018-06-11
  • 打赏
  • 举报
回复
这样均等步进的值很容易得到: SELECT 客户名称, 客户ID, (注册资金 + 200) \ 200 AS 注册资金评分 FROM 客户基本信息
脆皮大雪糕 2018-06-11
  • 打赏
  • 举报
回复
引用 14 楼 Chen8013 的回复:
[quote=引用 12 楼 chewinggum 的回复:] [quote=引用 11 楼 Chen8013 的回复:] 楼上这样,如何限定“注册资金评分”最大值为5呢?
所以应该采纳8楼的答案呗 标准语句 SQL server、access、oracle 都可以执行[/quote] 不过,我还有个疑问:  那个“结果”应该是整数1到5,我看你的写法,除法运算用的是 / ,而10楼的写法是 \ 。  你的写法,它的运算结果是整数吗? [/quote] 所以我用了floor函数。因为我不确定\是否所有数据库都支持。但是我罗列的那三个数据库都支持floor函数,其他的我不确定。
舉杯邀明月 2018-06-11
  • 打赏
  • 举报
回复
呵呵,解决问题的方法,肯定是会有几种的。 看楼主如何选择了。
of123 2018-06-11
  • 打赏
  • 举报
回复
引用 11 楼 Chen8013 的回复:
楼上这样,如何限定“注册资金评分”最大值为5呢?
用两个查询即可: SELECT 客户名称, 客户ID, (注册资金 + 200) \ 200 AS 注册资金评分 FROM 客户基本信息 WHERE 注册资金 < 1000 SELECT 客户名称, 客户ID, 5 AS 注册资金评分 FROM 客户基本信息 WHERE 注册资金 >= 1000 也可以将他们作为子查询组合到一个嵌套查询中。 总之,一个问题的解法可以多种多样,不存在唯一正确解答。
qq152521766 2018-06-10
  • 打赏
  • 举报
回复
数据库没有IIF语句,你可以试试用WHERE以及CASE语句, 举一个例子, 在学生成绩表中,查询每个学生的期末平均分(不统计不及格的成绩;若某生全部不及格,依然列出) SELECT SS.StudentNo ,CONVERT(DECIMAL(3,1),AVG(SS.FinalScore)) AS FinalScoreAverage FROM tb_StudentScore AS SS WHERE SS.FinalScore>=60
脆皮大雪糕 2018-05-21
  • 打赏
  • 举报
回复
因为分组比较有规律,可以归纳出等级通式法简化语句

select 客户名称,客户ID,case when (floor(注册资金/200)+1<=5) then floor(注册资金/200)+1 else 5 end as 注册资金评分  from 客户基本信息
TT^_^TT 2018-05-20
  • 打赏
  • 举报
回复
1.SQL不支持iff语句,要把它换为case when ……then 如:case when 注册资金 >= 800 then 5 when 注册资金 < 800 and 注册资金 >= 600 then 4 …… AS 注册资金评分 2.IFF是access数据库里的函数
qq_42101986 2018-05-20
  • 打赏
  • 举报
回复
引用 3 楼 chewinggum 的回复:
SQL语句中用case when then 参考 https://www.cnblogs.com/HDK2016/p/8134802.html
但是case when then 在VB里面无法执行吧!
qq_42101986 2018-05-19
  • 打赏
  • 举报
回复
select 客户名称,客户ID,iif(客户基本信息.注册资金 >= 800,'5',iif(客户基本信息.注册资金 < 800 and 客户基本信息.注册资金 >= 600,'4',iif(客户基本信息.注册资金 < 600 and 客户基本信息.注册资金>= 400,'3',iif(客户基本信息.注册资金<400 and 客户基本信息.注册资金 >= 200,'2','1')))) AS 注册资金评分 from 客户基本信息"
舉杯邀明月 2018-05-19
  • 打赏
  • 举报
回复
刚才查了一下,select 语句中,直接用if( )函数,不是iif( )。  用法跟VB6的iif( )一样,只是函数名少1个 i 。 (其实这段内容是在 13:25左右的回复、位于“3楼”的,但不巧遇到网络问题,回复不了……然后我做别的事去了)
脆皮大雪糕 2018-05-19
  • 打赏
  • 举报
回复
SQL语句中用case when then 参考 https://www.cnblogs.com/HDK2016/p/8134802.html
舉杯邀明月 2018-05-19
  • 打赏
  • 举报
回复
1. 你的那一堆IIF( )函数,返回结果是“数值”,不是“字段名”吧! 2. SQL 直接支持IIF( )函数?(我印象中,它好像没有呢)   如果不支持,你需要在“sql查询语句外”,用VB语句事先处理出“结果”,再拼接成SQL语句啊。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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