我有一个表格,其中有一个标有'sortorder'的列,用于允许客户手动更改每个项目的顺序。该表还有一个标记为“CategoryId”的列。
我很好奇,如果我批量导入一组数据,其中我知道所有数据,包括CategoryId,我如何在查询中指定'SortOrder'的实施值,以便它从1到X内每个独特的CategoryId。
谢谢大家。
答案 0 :(得分:9)
我不确定我理解你的问题,但我认为你要问的是如何在插入表格期间合成一个合适的SortOrder。您应该使用ROW_NUMBER()和CategoryId进行分区。当然,您需要定义一个排序标准,该标准给出“1到X”的属性顺序:
INSERT INTO myTable (SortOrder, CategoryId, <other columns> ...)
SELECT ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY mySortCriteria)
, CategoryId
, <other columns> ...
FROM SourceTable;
答案 1 :(得分:1)
听起来你需要在导入中使用row_number函数。
INSERT MyTable(SortOrder, ...)
SELECT SortOrder = row_number() over (partition by CatgoryID order by SomeOtherField), ...
FROM MyTable
答案 2 :(得分: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
然后将数据放入您的产品表中。