2011-09-13 87 views
1

您能否提供一個非常簡單的SQL示例,說明如何創建可自動遞增但在每次更改後重新啓動的「count」或「order」領域?在下表中,每次「膳食」字段發生變化時,「訂單」字段將從「1」重新開始。謝謝。在另一個字段發生更改後重置的自動遞增字段

膳食           時間       訂購
午餐        10:30         午餐        11:00         午餐        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

這不是東西,你應該在數據庫中存儲。基本上兩次存儲相同的信息(在這種情況下,它的派生,但實際上是相同的),這可能會導致問題的道路上。最後一行之前,你會得到一個新的午餐行,並且訂單號碼將被搞亂,等等。相反,只需要在需要時計算它的數量。

你不提這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]'?呵呵 – Andomar

+0

謝謝。我在ASP.NET中使用MS SQL。別擔心,實際的字段名稱將是InTime和ShiftOrder。 – Nick

相關問題