2011-01-20 18 views
1

に選択し、私はIDと実物に基づく金額の選択をしたいSQL私は以下のようなテーブルを持っている状態

ID | Amt 
------- 
1 | $30 
2 | $2 
3 | $50 

は、ID = 1があることを保証するものではないということです。そこで、ID = 1が存在するかどうかを確認したいのですが、ID = 1に対応する金額を選択します。そうでなければ、ID = 2の金額を選択します。

ので、何かのように、

Select (If ID= 1 then amt else amt(for ID2) from Table 

どのように私はこのSQL SELECT文を達成することができますか?

ありがとうございました。 。

+3

ANSI SQL92のアプローチについてROWNUMの

SELECT * FROM (select amt from tbl order by id) X WHERE ROWNUM=1; 

を使用使っている。 –

答えて

2

1と2がない場合はどうなりますか?それが常に次のIDに落ちる場合は、そのIDの最初の項目を選択する必要があります。このため

select top 1 amt from table order by id; 

構文は、あなたの質問に基づいて

0

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

+0

最小のIDだけを必要とするならば... where句から "where(ID <3)"を削除し、 "最小" idを返します。 –

0
 
select id, amt from table where id = (select min(id) from table) 
1

、よりよいがあるかもしれません...私は現在、DBS間をジャンプしています...少し外れかもしれません方法は...多くを知らない、これが私の答えです:

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 

は、任意の開始値nために一般化するnn+1と1と2を交換してください。

高値に関係なく、渡されたIDよりも小さい既存のIDを実際に探したい場合は、2の上限を削除します。

0

でこれを達成することができます最低ID付き

MySQL、SQLite、PostgreSQL使用制限

SQL Serverの場合210
select amt from tbl order by id limit 1; 

、Sybaseの利用トップ

select top 1 amt from tbl order by id; 

Oracleのための最善の答えはあなたのRDBMSれている依存する場合があります

SELECT AMT FROM TBL WHERE ID = (SELECT MIN(ID) FROM TBL) 
関連する問題