最近のトラックバック

最近のコメント

2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« Oracle Warehouse Builder(OWB)のエラー | トップページ | Big5コードの処理について »

2006年11月13日 (月)

空き番号が無いかチェック

【状況】

あるテーブル(T_TEST)の列(RNO int)は1から999999までの連続番号で書き込まれている。
連続番号にするために空き番号が無いかチェックをし、空き番号があれば、それを優先的に使用したいとした場合。

【対処】

ROW_NUMBER関数で先頭から空いてる番号を見つける(SQLServer2005以降)

select
min([仮名].[連番]) as [空き番号]
from
(select [番号], ROW_NUMBER() over(order by [番号]) as [連番] from [テーブル名]
) [仮名]
where [番号]<>[連番]

【補足】

SQL Server2005 Beta 2 Transact-SQL の機能強化

ROW_NUMBER

ROW_NUMBER 関数を使用して、クエリの結果行に整数の一連番号を割り当てることができます。 たとえば、すべての講演者の speakertrackscore を返し、スコアの降順に 1 から始まる連続値を結果行に割り当てるとします。 ROW_NUMBER 関数で OVER (ORDER BY score DESC) を指定した次のクエリを実行すると、希望する結果が出力されます。

SELECT ROW_NUMBER() OVER(ORDER BY score DESC) AS rownum, 
  speaker, track, score
FROM SpeakerStats
ORDER BY score DESC

結果セットは以下のようになります。

rownum speaker    track      score
------ ---------- ---------- -----------
1      Jessica    Dev        9
2      Ron        Dev        9
3      Suzanne    DB         9
4      Kathy      Sys        8
5      Michele    Sys        8
6      Mike       DB         8
7      Kevin      DB         7
8      Brian      Sys        7
9      Joe        Dev        6
10     Robert     Dev        6
11     Dan        Sys        3

スコアが最も高い講演者には行番号 1 が割り当てられ、スコアが最も低い講演者は行番号 11 が割り当てられます。ROW_NUMBER 関数は、要求した順序に従ってすべての行に異なる行番号を返します。 OVER() オプションの中で指定した ORDER BY リストが一意ではない場合、結果は 1 とおりに決まりません。 つまり、正しいクエリの結果が 2 つ以上存在することになります。クエリを呼び出すごとに異なる結果が得られることもあります。 たとえば、上記の例では 3 人の講演者 Jessica、Ron、Suzanne に同一の最高スコア (9) が与えられています。 異なる講演者には異なる行番号が割り当たることになっているので、Jessica、Ron、Suzanne にそれぞれ割り当てられた値 1、2、3 は、この 3 人に順不同で割り当てられたと考えてください。 値 1、2、3 がそれぞれ Ron、Suzanne、Jessica に割り当てられたとしても、結果が正しいことに変わりありません。

« Oracle Warehouse Builder(OWB)のエラー | トップページ | Big5コードの処理について »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181317/12670154

この記事へのトラックバック一覧です: 空き番号が無いかチェック:

« Oracle Warehouse Builder(OWB)のエラー | トップページ | Big5コードの処理について »