我有一個表格,其中有一個標記爲'sortorder'的列,用於允許客戶手動更改每個項目的順序。該表還有一個標記爲「CategoryId」的列。根據單個數據庫查詢中的條件增加值
我很好奇,如果我批量導入一組數據,其中我知道包括CategoryId在內的所有數據,我如何在查詢內指定'SortOrder'的含義值,以便它從1到X在每個唯一的CategoryId中。
謝謝大家。
我有一個表格,其中有一個標記爲'sortorder'的列,用於允許客戶手動更改每個項目的順序。該表還有一個標記爲「CategoryId」的列。根據單個數據庫查詢中的條件增加值
我很好奇,如果我批量導入一組數據,其中我知道包括CategoryId在內的所有數據,我如何在查詢內指定'SortOrder'的含義值,以便它從1到X在每個唯一的CategoryId中。
謝謝大家。
我不知道我理解你的問題,但我認爲你問的是如何在插入到表中時合成合適的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;
聽起來你需要使用ROW_NUMBER函數在您的導入。
INSERT MyTable(SortOrder, ...)
SELECT SortOrder = row_number() over (partition by CatgoryID order by SomeOtherField), ...
FROM MyTable
對於任何後來仍然在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
然後把數據放到你的督促表。
您節省了我的一天,謝謝。我知道SQL 2005的ROW_NUMBER(),但我不知道PARTITION BY參數。 非常感謝。 – 2009-05-29 18:33:25