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
-----------------
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
用我上面列出的数据举例如果一个值501 则返回500,999也是500.就是>=500,<1000.如果一个值1001 则返回1000,4999也是1000.就是>=1000,<5000.如果一个值499 则返回500 ,就是如果范围内没有结果并且小于最小结果返回最小
如果一个值 10001 则返回10000 ,就是如果范围内没有结果并且大于最小结果返回最大但是总数据行数不固定
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 行受影响)
*/
先谢谢了,但是你这个是写死的case when。我这个是要活的。我自己写个whild循环写了。但是想问下有没更简单的办法写。如果我这个是100条呢。求相近abs取绝对值可以写,我这个是求范围。就不知道怎么搞了。