2016-04-17 6 views
0

私は私のDB2データベースからテーブル内の次のレコードを持っています。各行のカーソルを使用せずにデータベースから特定のレコードを取り出す方法は?

num f1  f2  f3 
------------------------ 
*** e1  e2  e3 
A  e1  e2  e3 
*** e4  e5  e6 

「キー」(プライマリではないが)フィールドf1、f2、f3の組み合わせから作られています。 1つのキーに対して複数の行がある場合、フィールド "num"に値 "***"が含まれていない行を選択する必要があります。それ以外の場合は、キーが一意であれば、その行を選択する必要があります。私はそれが一時テーブルを使用して働かせた私の例では

は、私は、キーE1、E2、E3及び "***" キーE4、E5のための、E6

のための "A" を返す必要がありますここでは、カーソルを使ってメインテーブルを読みながら、正しい行を挿入します。しかし、それは遅く、非常に遅いです。

正しいレコードを取得するためにSQLクエリを1つだけ使用する方法、またはC#プログラム(アプリケーションで使用する言語)を使用する方法はありますか?私は成功せずにDatatablesとLINQを試してみました。あなたはこのような何かを行うことができ

+0

'それ以外の場合は、キーが一意であれば行を選択する必要があります。 '***'以外の一意でない値はありますか? – Rob

答えて

3

あなたは、単に私が「A」の順序を確認するために手元に何のDB2を持っていないし、「*」

、多分そのMAX MINについてはよく分からない

SELECT MIN(num), f1, f2, f3 from myTable 
group by f1, f2, f3 

のようなものを意味しますか

EDIT: 「***」が最小値または最大値のいずれかである場合にのみ作用します

+0

それはそれをしました。どうもありがとうございました – Harkonnen

0

あなたの助けを

ありがとう:

ある
SELECT TOP 1 * FROM 
myTable 
ORDER BY CASE WHEN num = '***' THEN 1 ELSE 0 END  
WHERE f1 = something 
AND f2 = something 
AND f3 = something 

、あなたは値がフィルタリングを適用する、「***」下にプッシュされ等しいので、それを注文し、最初の行を選択します。

関連する問題