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列中更新,这会抛出错误,说子查询返回多行。请帮助更新查询。感谢。
答案 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