如何为相同的itemID生成相同的seqnumber

时间:2018-04-09 08:35:04

标签: sql sql-server-2008

with t as (

           select 'AA-00001152' itemid from dual union all

           select 'AA-00001152' from dual union all

           select 'AA-00001153' from dual union all

           select 'AA-00001154' from dual union all

           select 'AA-00001154' from dual union all

           select 'CC-254565' from dual union all

           select 'AA-00001156' from dual union all

           select 'AA-00001156' from dual union all

           select 'BB-00001200' from dual

          )

select  14999 + dense_rank() over(order by itemid) seq_no,

        itemid

  from  t

  order by seq_no

这里我为多个itemId生成了seq_no,但我试图在seq_no列中更新,这会抛出错误,说子查询返回多行。请帮助更新查询。感谢。

2 个答案:

答案 0 :(得分:0)

您需要插入查询,而不是更新。这应该工作

declare @Dual table  ( Itemid varchar(20), seq_no int)
;

with t (itemid) as (

               select 'AA-00001152'   union all

               select 'AA-00001152'  union all

               select 'AA-00001153'  union all

               select 'AA-00001154'  union all

               select 'AA-00001154'  union all

               select 'CC-254565'  union all

               select 'AA-00001156'  union all

               select 'AA-00001156'  union all

               select 'BB-00001200' 

              )
insert into @Dual (Itemid,seq_no)
select itemid, 14999 + dense_rank() over(order by itemid) from t

select * from @Dual

答案 1 :(得分:0)

对于SQL Server,您可以使用cte作为临时结果集来更新表中的序列

;with t as (
      select *, 
              14999 + dense_rank() over(order by itemid) Seq
      from table t
)

update t1 set seq_no = t.Seq 
from table t1 inner join t on t.itemid = t1.itemid