我有一张如下表格,
ID | Amt
-------
1 | $30
2 | $2
3 | $50
我想根据ID对金额进行选择,而事实是ID = 1并不保证在那里。所以,我想检查ID = 1是否存在,然后我选择对应ID = 1的金额,否则我想选择ID = 2的金额。
等等,
Select (If ID= 1 then amt else amt(for ID2) from Table
如何实现此Sql select语句?
感谢。
答案 0 :(得分:2)
如果不存在1和2怎么办?如果它总是要下降到下一个id,你应该选择按ID排序的第一个项目。
select top 1 amt from table order by id;
这个的语法可能有点......我正在dbs之间跳...
答案 1 :(得分:1)
根据你的问题,可能会有更好的方法...不知道更多,这是我的答案:
MSSQL:
select top 1 * from myTable where ID >= 1 order by ID
MySQL的:
select * from myTable where ID >= 1 order by ID limit 1
答案 2 :(得分:0)
select Amt
from theTable
where ID in
(select min(ID)
from theTable
where (ID < 3)
)
答案 3 :(得分:0)
select id, amt from table where id = ( select min( id ) from table )
答案 4 :(得分:0)
这是Oracle特定的答案。
目前尚不清楚您想要的解决方案有多普遍。
对于硬编码值1和2:
select amt from (
select amt from table where id between 1 and 2 order by id asc
) where rownum =1
将1和2替换为n
和n+1
,以概括任何起始值n
。
如果你真的想要找到大于你传入的最低现有ID,那么删除2的上限,无论它有多高。
答案 5 :(得分:0)
您可能想要使用EXISTS语句并创建一个函数 http://www.sqlteam.com/article/using-exists
答案 6 :(得分:0)
如果数据库是SQL Server,您可以使用CASE State
来实现此目的答案 7 :(得分:0)
看起来您想要ID最低的记录
对于MySQL,SQLite,PostgreSQL使用限制
select amt from tbl order by id limit 1;
对于SQL Server,Sybase使用top
select top 1 amt from tbl order by id;
对于Oracle,请使用rownum
SELECT * FROM (select amt from tbl order by id) X WHERE ROWNUM=1;
对于ANSI SQL92方法
SELECT AMT FROM TBL WHERE ID = (SELECT MIN(ID) FROM TBL)