VB查询数据库,连接没问题,下面是我的查询语句,一直说有语法问题,求指教!select 客户名称,客户ID,iif(注册资金 >= 800,'5',iif(注册资金 < 800 and 注册资金 >= 600,'4',iif(注册资金 < 600 and 注册资金>= 400,'3',iif(注册资金<400 and 注册资金 >= 200,'2','1')))) as 注册资金评分 
from 客户基本信息

解决方案 »

  1.   


    select 客户名称,客户ID,iif(客户基本信息.注册资金 >= 800,'5',iif(客户基本信息.注册资金 < 800 and 客户基本信息.注册资金 >= 600,'4',iif(客户基本信息.注册资金 < 600 and 客户基本信息.注册资金>= 400,'3',iif(客户基本信息.注册资金<400 and 客户基本信息.注册资金 >= 200,'2','1')))) AS 注册资金评分 from 客户基本信息"
      

  2.   

    1. 你的那一堆IIF( )函数,返回结果是“数值”,不是“字段名”吧!
    2. SQL 直接支持IIF( )函数?(我印象中,它好像没有呢)
      如果不支持,你需要在“sql查询语句外”,用VB语句事先处理出“结果”,再拼接成SQL语句啊。
      

  3.   

    SQL语句中用case when then参考
    https://www.cnblogs.com/HDK2016/p/8134802.html
      

  4.   

    刚才查了一下,select 语句中,直接用if( )函数,不是iif( )。
     用法跟VB6的iif( )一样,只是函数名少1个 i 。
    (其实这段内容是在 13:25左右的回复、位于“3楼”的,但不巧遇到网络问题,回复不了……然后我做别的事去了)
      

  5.   

    但是case when then 在VB里面无法执行吧!
      

  6.   

    1.SQL不支持iff语句,要把它换为case when ……then
    如:case
            when  注册资金 >= 800 then 5
            when  注册资金 < 800 and 注册资金 >= 600 then 4
           …… AS 注册资金评分 
    2.IFF是access数据库里的函数
      

  7.   

    因为分组比较有规律,可以归纳出等级通式法简化语句select 客户名称,客户ID,case when (floor(注册资金/200)+1<=5) then floor(注册资金/200)+1 else 5 end as 注册资金评分  from 客户基本信息
      

  8.   

    数据库没有IIF语句,你可以试试用WHERE以及CASE语句,
    举一个例子,
    在学生成绩表中,查询每个学生的期末平均分(不统计不及格的成绩;若某生全部不及格,依然列出)
    SELECT
    SS.StudentNo
    ,CONVERT(DECIMAL(3,1),AVG(SS.FinalScore)) AS FinalScoreAverage
    FROM
    tb_StudentScore AS SS
    WHERE
    SS.FinalScore>=60
      

  9.   

    这样均等步进的值很容易得到:SELECT 客户名称, 客户ID, (注册资金 + 200) \ 200 AS 注册资金评分 FROM 客户基本信息
      

  10.   

    所以应该采纳8楼的答案呗
    标准语句 SQL server、access、oracle 都可以执行
      

  11.   

    所以应该采纳8楼的答案呗
    标准语句 SQL server、access、oracle 都可以执行
    哦,你不说我还没注意。
    估计你的写法可以吧。但楼主不是我…………
      

  12.   

    所以应该采纳8楼的答案呗
    标准语句 SQL server、access、oracle 都可以执行
    不过,我还有个疑问:
     那个“结果”应该是整数1到5,我看你的写法,除法运算用的是 / ,而10楼的写法是 \ 。
     你的写法,它的运算结果是整数吗?
      

  13.   


    用两个查询即可:
    SELECT 客户名称, 客户ID, (注册资金 + 200) \ 200 AS 注册资金评分 FROM 客户基本信息 WHERE 注册资金 < 1000
    SELECT 客户名称, 客户ID, 5 AS 注册资金评分 FROM 客户基本信息 WHERE 注册资金 >= 1000也可以将他们作为子查询组合到一个嵌套查询中。总之,一个问题的解法可以多种多样,不存在唯一正确解答。
      

  14.   

    所以应该采纳8楼的答案呗
    标准语句 SQL server、access、oracle 都可以执行
    不过,我还有个疑问:
     那个“结果”应该是整数1到5,我看你的写法,除法运算用的是 / ,而10楼的写法是 \ 。
     你的写法,它的运算结果是整数吗?

    所以我用了floor函数。因为我不确定\是否所有数据库都支持。但是我罗列的那三个数据库都支持floor函数,其他的我不确定。