0

我有一个问题,我当前的脚本正确分配给每个参考实体。

update dbo.expozitura
set reference_subjektu = replicate('0', 8-len(rn) )+b.rn
from dbo.expozitura a
INNER JOIN 
(
    select dbo.expozitura.cislo_subjektu , cast(ROW_NUMBER() OVER (order by cislo_subjektu) as varchar) as  rn
    from dbo.expozitura
)b ON b.cislo_subjektu = a.cislo_subjektu

select * from dbo.expozitura;

输出:(步骤 1)

cislo_subjektu  reference_subjektu  organizace  adresa_ulice    psc         ico
1               00000001                 2                                7774588
2               00000002                 0      Linkoln 50                7774588
3               00000003                 0                     403 31     729544866
4               00000004                 0                                8544569
5               00000005                 0      Linkoln 66     578 99     8542155
6               00000006                 0                     558 41     8542155

第2步:

我需要再做一个声明,如果有任何“dbo.expozitura”具有相同的“ico”。所以取他的第一个引用,并根据具体的“ico”分配给所有相同的。这样的会更多。

输出:

如果一切都正确,这应该是最终结果。

cislo_subjektu  reference_subjektu  organizace  adresa_ulice    psc         ico
1               00000001                 2                                7774588
2               00000001                 0      Linkoln 50                7774588
3               00000003                 0                     403 31     729544866
4               00000004                 0                                8544569
5               00000005                 0      Linkoln 66     578 99     8542155
6               00000005                 0                     558 41     8542155

请帮我解决我的问题。

4

1 回答 1

0

您可以使用可更新的公用表表达式来实现此目的:

With x as (
    Select
        reference_subjektu,
        min(reference_subjektu) over (partition by ico) nval
    from
        expozitura
) update
    x
set
    reference_subjektu = nval
where
    reference_subjektu != nval;

Example SQLFiddle

于 2013-10-27T18:58:18.763 回答