/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Omnummerering
Fra : MKJ


Dato : 27-10-08 14:13

Hej

Jeg har en table med følgende

Id Nr
1 1
2 1
3 1
4 2
5 3
6 3
7 4

Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
nummer, max(Nr) + 1.

--
MKJ



 
 
Stig Johansen (27-10-2008)
Kommentar
Fra : Stig Johansen


Dato : 27-10-08 16:28

MKJ wrote:

> Hej
>
> Jeg har en table med følgende
>
> Id Nr
> 1 1
> 2 1
> 3 1
> 4 2
> 5 3
> 6 3
> 7 4
>
> Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
> bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
> nummer, max(Nr) + 1.

UPDATE table SET Nr=Id
Men øhh, what's the point?

--
Med venlig hilsen
Stig Johansen

MKJ (27-10-2008)
Kommentar
Fra : MKJ


Dato : 27-10-08 16:55

"Stig Johansen" <wopr.dk@gmaill.com> wrote in message
news:4905de16$0$90268$14726298@news.sunsite.dk...
> MKJ wrote:
>
>> Hej
>>
>> Jeg har en table med følgende
>>
>> Id Nr
>> 1 1
>> 2 1
>> 3 1
>> 4 2
>> 5 3
>> 6 3
>> 7 4
>>
>> Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
>> bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
>> nummer, max(Nr) + 1.
>
> UPDATE table SET Nr=Id
> Men øhh, what's the point?
>
> --
> Med venlig hilsen
> Stig Johansen

Det er ikke helt nok. Id et er et autonummer felt og Nr er et int felt.
Systemet der skal opdateres er et sagssystem der kan indeholde x antal
dokumenter i x antal sager. Disse dokumenter får hvert et nummer. Før i
tiden blev dokumenterne tildelt numre fra 1 til x i hver sag (lokal
nummerering) men nu skal det ændres, så dokumenterne altid har et unikt
fortløbende nummer (global nummerering). Dvs jeg skal finde alle dubletter,
det er nemt nok. Men hvordan laver jeg en løkke der i mit eksempel herover
vil opdatere dataene så det vil blive til:
Nr skal ændres hvis der er dubletter, Nr må ikke ændres hvis det er unik.

Id Nr
1 1
2 5
3 6
4 2
5 3
6 7
7 4

--
MKJ




Michael Zedeler (27-10-2008)
Kommentar
Fra : Michael Zedeler


Dato : 27-10-08 17:23

MKJ wrote:
> "Stig Johansen" <wopr.dk@gmaill.com> wrote in message
> news:4905de16$0$90268$14726298@news.sunsite.dk...
>> MKJ wrote:
>>
>>> Jeg har en table med følgende
>>>
>>> Id Nr
>>> 1 1
>>> 2 1
>>> 3 1
>>> 4 2
>>> 5 3
>>> 6 3
>>> 7 4
>>>
>>> Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
>>> bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
>>> nummer, max(Nr) + 1.
>> UPDATE table SET Nr=Id
>> Men øhh, what's the point?
>
> Det er ikke helt nok. Id et er et autonummer felt og Nr er et int felt.
> Systemet der skal opdateres er et sagssystem der kan indeholde x antal
> dokumenter i x antal sager. Disse dokumenter får hvert et nummer. Før i
> tiden blev dokumenterne tildelt numre fra 1 til x i hver sag (lokal
> nummerering) men nu skal det ændres, så dokumenterne altid har et unikt
> fortløbende nummer (global nummerering).

Men er der nogen særlig gevinst ved at kunne slippe for at omnummerere
det lille antal rækker, det trods alt gælder?

Mvh. Michael.

MKJ (27-10-2008)
Kommentar
Fra : MKJ


Dato : 27-10-08 20:51


"Michael Zedeler" <michael@zedeler.dk> wrote in message
news:4905eacc$0$90271$14726298@news.sunsite.dk...
> MKJ wrote:
>> "Stig Johansen" <wopr.dk@gmaill.com> wrote in message
>> news:4905de16$0$90268$14726298@news.sunsite.dk...
>>> MKJ wrote:
>>>
>>>> Jeg har en table med følgende
>>>>
>>>> Id Nr
>>>> 1 1
>>>> 2 1
>>>> 3 1
>>>> 4 2
>>>> 5 3
>>>> 6 3
>>>> 7 4
>>>>
>>>> Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
>>>> bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
>>>> nummer, max(Nr) + 1.
>>> UPDATE table SET Nr=Id
>>> Men øhh, what's the point?
>
> Men er der nogen særlig gevinst ved at kunne slippe for at omnummerere det
> lille antal rækker, det trods alt gælder?
>
> Mvh. Michael.

Det er kun et eksempel, i den rigtige database er der 35000-40000 records,
og der kan være flere databaser, hos forskellige kunder, der kan have samme
"problem".

--
MKJ



Michael Zedeler (27-10-2008)
Kommentar
Fra : Michael Zedeler


Dato : 27-10-08 21:26

MKJ wrote:
> "Michael Zedeler" <michael@zedeler.dk> wrote in message
> news:4905eacc$0$90271$14726298@news.sunsite.dk...
>> MKJ wrote:
>>> "Stig Johansen" <wopr.dk@gmaill.com> wrote in message
>>> news:4905de16$0$90268$14726298@news.sunsite.dk...
>>>> MKJ wrote:
>>>>
>>>>> Jeg har en table med følgende
>>>>>
>>>>> Id Nr
>>>>> 1 1
>>>>> 2 1
>>>>> 3 1
>>>>> 4 2
>>>>> 5 3
>>>>> 6 3
>>>>> 7 4
>>>>>
>>>>> Er det muligt at lave et script der kan ændre Nr kolonnen så værdierne
>>>>> bliver unikke? Den skal finde dubletter og ændre dem til næste ledige
>>>>> nummer, max(Nr) + 1.
>>>> UPDATE table SET Nr=Id
>>>> Men øhh, what's the point?
>> Men er der nogen særlig gevinst ved at kunne slippe for at omnummerere det
>> lille antal rækker, det trods alt gælder?
>
> Det er kun et eksempel, i den rigtige database er der 35000-40000 records,
> og der kan være flere databaser, hos forskellige kunder, der kan have samme
> "problem".

Jaja. Men du har ikke besvaret mit spørgsmål - hvorfor er det
overhovedet interessant at prøve at bevare nogle få værdier uændret, når
størstedelen alligevel skal ændres?

Mvh. Michael.


MKJ (28-10-2008)
Kommentar
Fra : MKJ


Dato : 28-10-08 08:54


"Michael Zedeler" <michael@zedeler.dk> wrote in message
news:490623c8$0$90264$14726298@news.sunsite.dk...
> MKJ wrote:
>> "Michael Zedeler" <michael@zedeler.dk> wrote in message
>> news:4905eacc$0$90271$14726298@news.sunsite.dk...
>>> MKJ wrote:
>>>> "Stig Johansen" <wopr.dk@gmaill.com> wrote in message
>>>> news:4905de16$0$90268$14726298@news.sunsite.dk...
>>>>> MKJ wrote:
>>>>>
>>>>>> Jeg har en table med følgende
>>>>>>
>>>>>> Id Nr
>>>>>> 1 1
>>>>>> 2 1
>>>>>> 3 1
>>>>>> 4 2
>>>>>> 5 3
>>>>>> 6 3
>>>>>> 7 4
>>>>>>
>
> Jaja. Men du har ikke besvaret mit spørgsmål - hvorfor er det overhovedet
> interessant at prøve at bevare nogle få værdier uændret, når størstedelen
> alligevel skal ændres?
>
> Mvh. Michael.
>

Det er ikke størstedelen der bliver ændret. Skiftet til global nummerering
er lavet for år siden, det er bare gammel data der skal ryddes op i. Jeg vil
tro der er 2-300 der skal ændres.

--
MKJ



Per Rønne (28-10-2008)
Kommentar
Fra : Per Rønne


Dato : 28-10-08 09:17

MKJ <m@ds.dk> wrote:

> "Michael Zedeler" <michael@zedeler.dk> wrote in message
> news:490623c8$0$90264$14726298@news.sunsite.dk...
> > MKJ wrote:
> >> "Michael Zedeler" <michael@zedeler.dk> wrote in message
> >> news:4905eacc$0$90271$14726298@news.sunsite.dk...
> >>> MKJ wrote:
> >>>> "Stig Johansen" <wopr.dk@gmaill.com> wrote in message
> >>>> news:4905de16$0$90268$14726298@news.sunsite.dk...
> >>>>> MKJ wrote:
> >>>>>
> >>>>>> Jeg har en table med følgende
> >>>>>>
> >>>>>> Id Nr
> >>>>>> 1 1
> >>>>>> 2 1
> >>>>>> 3 1
> >>>>>> 4 2
> >>>>>> 5 3
> >>>>>> 6 3
> >>>>>> 7 4
> >>>>>>
> >
> > Jaja. Men du har ikke besvaret mit spørgsmål - hvorfor er det overhovedet
> > interessant at prøve at bevare nogle få værdier uændret, når størstedelen
> > alligevel skal ændres?
> >
> > Mvh. Michael.
> >
>
> Det er ikke størstedelen der bliver ændret. Skiftet til global nummerering
> er lavet for år siden, det er bare gammel data der skal ryddes op i. Jeg vil
> tro der er 2-300 der skal ændres.

Så burde du kunne lave en ny tabel:

create table temp as
select nr, count(nr) antal
from gammel_tabel
group by nr
having antal > 1;

Så kan du enten manuelt eller i et script gå gennem den gamle tabel på
de numre, som findes i temp, lade den første være uændret [og
dekrementere antal] og ændre resten [og stadig dekrementere antal idet
rækken slettes når du når ned på 0].

Det fremgår ikke af dit spørgsmål, om du bruger Oracle, MySQL,
PostgreSQL eller ... så du må tillempe hvad jeg har skrevet til din
database.


--
Per Erik Rønne
http://www.RQNNE.dk

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste