2009-05-29 95 views
3

我有一個表格,其中有一個標記爲'sortorder'的列,用於允許客戶手動更改每個項目的順序。該表還有一個標記爲「CategoryId」的列。根據單個數據庫查詢中的條件增加值

我很好奇,如果我批量導入一組數據,其中我知道包括CategoryId在內的所有數據,我如何在查詢內指定'SortOrder'的含義值,以便它從1到X在每個唯一的CategoryId中。

謝謝大家。

回答

9

我不知道我理解你的問題,但我認爲你問的是如何在插入到表中時合成合適的SortOrder。您應該使用ROW_NUMBER()和CategoryId進行分區。當然,你需要定義一個排序標準,讓「1到X」的PROPERT順序:

INSERT INTO myTable (SortOrder, CategoryId, <other columns> ...) 
SELECT ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY mySortCriteria) 
    , CategoryId 
    , <other columns> ... 
    FROM SourceTable; 
+0

您節省了我的一天,謝謝。我知道SQL 2005的ROW_NUMBER(),但我不知道PARTITION BY參數。 非常感謝。 – 2009-05-29 18:33:25

1

聽起來你需要使用ROW_NUMBER函數在您的導入。

INSERT MyTable(SortOrder, ...) 
SELECT SortOrder = row_number() over (partition by CatgoryID order by SomeOtherField), ... 
FROM MyTable 
0

對於任何後來仍然在SQL Server 2000中的人來說,這是另一種完成任務的方法。

使用某種臨時表來修復批量插入的數據。確保它有一個名爲sortorder的列,該列初始填充1和基於標識的id列。

,那麼你可以用自我更新此連接,像

update t 
set sortorder = t1.sortorder +1 
from test t 
join Test t1 on t.id = t1.id+1 

然後把數據放到你的督促表。