0

私はこのテーブルを持っています:

table(fied1 int、field2 int、field3 varchar(40));

ストアドプロシージャなしで次のようなものを使用したいと思います。

declare int nr default 0;
select coalesce(max(field1),0) into nr from table where field2=? and field3=?;
if(nr = 0) then
  select coalesce(max(field1),0)+1 into nr from table;
end if;

単一選択からのnrの値が必要です。plsヘルプ!!!

4

2 に答える 2

0

where句に従って一致するものが見つからない場合にのみ、次のクエリを使用して、field1列に最後に挿入された値にプラスを1つ取得します。それ以外の場合は、field1に格納されている最大値を返します。

このクエリは、テーブルにレコードがない場合にケースを処理します。

field1が値0を持つことができる場合は、次のステートメントのフィルター基準「およびfield1 <> 0」が必要です。それ以外の場合は、このフィルター(およびfield1 <> 0)を次のクエリから削除します。

Select coalesce(
   max(field1),
   (select coalesce(max(field1),0)+1 from table)
   ) 
from table where field2=? and field3=? and field1<>0;
于 2012-04-30T13:01:02.257 に答える
0

これはあなたの要件を捉えていると思います:

SELECT
  CASE
    WHEN (max(field1) IS NULL OR max(field1) = 0) AND field2=? AND field3=? THEN (max(field1)+1)
    ELSE max(field1)
  END AS `field1_max`
FROM table
于 2012-04-30T13:40:21.367 に答える