如何在插入语句SQL Server中设置顺序计数?

时间:2016-04-03 13:47:28

标签: sql sql-server database

我尝试将数据从数据库复制到另一个数据库

我有这个查询

 insert into d1.dbo.Category(Id, Name, CategoryTemplateId, 
                             ParentCategoryId, PictureId, PageSize, 
                             AllowCustomersToSelectPageSize, 
                             ShowOnHomePage, IncludeInTopMenu, 
                             SubjectToAcl, LimitedToStores, Published, 
                             Deleted, DisplayOrder, 
                             CreatedOnUtc, UpdatedOnUtc)
    select 
        (ItemID + 25), ItemName, 1,
        (CategoryID + 16), '', 6,
        1, 1, 1, 0, 0, 1, 0, 1,
        iif(CreateDate is null, GETDATE(), CreateDate),
        iif(LastModifyDate is null, GETDATE(), LastModifyDate)
    from 
        d2.dbo.Item

工作正常。问题是:有一个列DisplayOrder如果我使用这个语法它将在行中插入1,但我真正需要的是计算1,2,3,4,...等

取决于(CategoryID + 16),直到(CategoryID + 16)更改它再次从1开始计数

请帮忙

1 个答案:

答案 0 :(得分:4)

使用row_number() over (partition by CategoryId order by (select null))填充DisplayOrder中的增加值。 (注意:+ 16中的partition by是多余的。)

此外,而不是这个结构:

iif(CreateDate is null,GETDATE(),CreateDate)

使用更简单,更标准的语法:

coalesce(CreateDate, GETDATE())