a              b
-----------------
1000.000 500
998.000         1000
966.000         5000
950.000         8000
940.000         10000
求一条语句,如果是b大于500小于1000取500对应的a值,如果大于1000小于5000取对应1000的a值,下面如上
如果大于10000取10000,小于500取500.a,b对应条数不固定.求高手解决下.谢了~~~SQL

解决方案 »

  1.   

    就是求一个范围.
    用我上面列出的数据举例如果一个值501 则返回500,999也是500.就是>=500,<1000.如果一个值1001 则返回1000,4999也是1000.就是>=1000,<5000.如果一个值499 则返回500 ,就是如果范围内没有结果并且小于最小结果返回最小
    如果一个值 10001 则返回10000 ,就是如果范围内没有结果并且大于最小结果返回最大但是总数据行数不固定
      

  2.   

    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([a] [numeric](7,3),[b] [int])
    INSERT INTO [tb]
    SELECT '1000.000','500' UNION ALL
    SELECT '998.000','1000' UNION ALL
    SELECT '966.000','5000' UNION ALL
    SELECT '950.000','8000' UNION ALL
    SELECT '940.000','10000'
    -->SQL查询如下:
    SELECT *,
    result=case when b<500 then 500 
        when b>=10000 then 10000
        else a 
       end 
    FROM [tb]
    /*
    a                                       b           result
    --------------------------------------- ----------- ---------------------------------------
    1000.000                                500         1000.000
    998.000                                 1000        998.000
    966.000                                 5000        966.000
    950.000                                 8000        950.000
    940.000                                 10000       10000.000(5 行受影响)
    */
      

  3.   


    先谢谢了,但是你这个是写死的case when。我这个是要活的。我自己写个whild循环写了。但是想问下有没更简单的办法写。如果我这个是100条呢。求相近abs取绝对值可以写,我这个是求范围。就不知道怎么搞了。