任何其他方式使用自联接而不交叉申请更新?

时间:2015-09-03 10:35:26

标签: sql sql-server sql-server-2008-r2

我需要使用聚合函数进行自我连接,在开始时我使用了一段时间来执行此操作,但性能非常糟糕,所以我更喜欢交叉连接,即使现在我的性能也很高。

create function dbo.get_max_maket_mapping_unique_id  (@market_cat_id int)
returns @val table (uni_id int)
as  
begin       
insert into @val
select max(isnull(unique_id,0))+1
from maket_mapping_unique_four
where market_cat_id = @market_cat_id

return     
end



update t1
    set t1.unique_id = uni_id
from 
    maket_mapping_unique_four t1
cross apply  dbo.get_max_maket_mapping_unique_id (t1.market_cat_id) c

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要每个“市场猫”的序列号。如果是这样,那么只需使用窗口函数:

with toupdate as (
      select muf.*,
             row_number() over (partition by market_cat_id order by (select null)) as seqnum
      from maket_mapping_unique_four muf
    )
update toupdate
    set unique_id = seqnum;