根据单个数据库查询中的条件增加值

时间:2009-05-29 18:25:09

标签: sql sql-server-2005

我有一个表格,其中有一个标有'sortorder'的列,用于允许客户手动更改每个项目的顺序。该表还有一个标记为“CategoryId”的列。

我很好奇,如果我批量导入一组数据,其中我知道所有数据,包括CategoryId,我如何在查询中指定'SortOrder'的实施值,以便它从1到X内每个独特的CategoryId。

谢谢大家。

3 个答案:

答案 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

然后将数据放入您的产品表中。