2011-09-13 11 views
1

自動インクリメントする「カウント」フィールドまたは「注文」フィールドを作成する方法の非常に単純なSQLの例を提供できますか?フィールド?下の表では、「食事」フィールドに変更があるたびに「注文」フィールドが「1」で再開します。ありがとう。別のフィールドの変更後にリセットされる自動インクリメントフィールド

食事           時間       注文
ランチ        10時30分        ランチ       午前11時        ランチ       午前11時15         ディナー        4時30分          ディナー        4:45           ディナー        5時00           ディナー        5時30分         

+0

RDBMSは...ですか? –

+0

あなたはどのRDBMSを使用していますか? – Wil

答えて

4

代わりの表にOrderを格納する、検討それをビューに追加します。テーブルの代わりにビューから選択することができます。

ビューは次のように、順序を計算するためにrow_number()を使用することができます。あなたは、データベースに格納されるべきものではないのですそれ

select row_number() over (partition by Meal order by Time) 
,  * 
from YourTable 

Example at SE Data.

1

。基本的に同じ情報を2回保存しています(この場合は派生していますが、効果的に同じです)。問題が発生する可能性があります。最後のランチ行の前に新しいランチ行が表示され、注文番号がうまくいきません。代わりに、必要なときに番号を計算してください。

あなたは(質問をしたときにその情報を含めることは常に良いアイデア)を使用しているRDBMSをどの触れていませんが、次のようなものは、SQL Serverとパーティション機能をサポートする他のRDBMSで動作します:

SELECT 
    meal, 
    [time], -- I'd pick a better column name myself. Reserved words = evil 
    ROW_NUMBER() OVER(PARTITION BY meal ORDER BY time) AS [order] -- Another reserved word! Eeek! 
FROM 
    My_Table 
+2

テーブル '[Table]'を呼び出さないのはなぜですか? hehe – Andomar

+0

ありがとうございます。私はASP.NETでMS SQLを使用しています。実際のフィールド名はInTimeとShiftOrderになりますのでご安心ください。 – Nick

関連する問題