2011-01-20 44 views
1

選擇我有一個表像之下,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語句?

謝謝。 。

+3

最好的答案可能取決於哪個RDBMS你正在使用。 – 2011-01-20 21:04:56

回答

2

如果1和2不在那裏?如果它總是直接跳到下一個ID,則應該選擇按ID排序的第一個項目。

select top 1 amt from table order by id; 

語法,這可能是斷了一下......我目前DBS之間跳躍......

0

select Amt from theTable where ID in (select min(ID) from theTable where (ID < 3) )

+0

如果你只是想要最小的ID ...只是從where子句中刪除「where(ID <3)」,它將返回「最小」的ID。 – 2011-01-20 21:08:26

0
 
select id, amt from table where id = (select min(id) from table) 
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 
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的上限,而不管它的值有多高。

0

它看起來像你想記錄最低ID

對於MySQL,SQLite,PostgreSQL使用限制

select amt from tbl order by id limit 1; 

對於SQL Server中,Sybase使用頂部

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)