SQL Server:在某些条件下将varchar生成为数字

时间:2013-10-27 18:14:04

标签: sql join casting sql-update

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

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

请帮我解决我的问题。

1 个答案:

答案 0 :(得分: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