SQL选择条件

时间:2011-01-20 21:02:11

标签: sql

我有一张如下表格,

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语句?

感谢。

8 个答案:

答案 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替换为nn+1,以概括任何起始值n

如果你真的想要找到大于你传入的最低现有ID,那么删除2的上限,无论它有多高。

答案 5 :(得分:0)

您可能想要使用EXISTS语句并创建一个函数 http://www.sqlteam.com/article/using-exists

答案 6 :(得分:0)

如果数据库是SQL Server,您可以使用CASE State

来实现此目的

http://msdn.microsoft.com/en-us/library/ms181765.aspx

答案 7 :(得分:0)

看起来您想要I​​D最低的记录

对于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)