Avatar billede lllund Nybegynder
14. oktober 2013 - 15:34 Der er 1 kommentar og
1 løsning

Opdatere PersonID i persontabel

Hej

Jeg har en række kunder i en kundedatabase jeg skal have genereret et Unik_KundeID på.

Hver person har et:
Unik_RecordID
Matchnavn1
Matchnavn2
Matchnavn3

Jeg skal så have oprettet et Unik_KundeID
således at hvert emne bliver opdateret med det laveste Unik_RecordID der findes i databasen.

Her skal jeg så først grupere/matche på Matchnavn1 herefter Matchnavn2 og så Matchnavn3

Det er ikke svært at finde det laveste ID på Matchnavn1, men når jeg så skal tjekke på Matchnavn2 får jeg et problem.

Hvis nu jeg i første omgang finder 3 emner der matcher på Matchnavn1 vil de så alle 3 få det lavest mulighe ID MIN(Unik_RecordID) = Unik_KundeID.

Men når jeg så tjekker på Matchnavn2 finder jeg 1 dublet mere, og her får jeg et problem.

Her risikerer jeg at finde et nyt Unik_RecordID der er lavere end det jeg før fandt.
Så skal jeg tilbage og have opdateret de 3 andre til det nye "laveste" Unik_RecordID.

Mit batch skal kunne køres dagligt

Her er lidt SQL som det er nu til de 2 første steps, men det giver jo som sagt fejl.


go

DROP TABLE [dbo].[temp_matchtabel]

go

SELECT Min(Unik_RecordID) AS Min_Unik_RecordID,
      matchnavn1,
      Count(*)          AS antal
INTO  [dbo].[temp_matchtabel]
FROM  [dbo].[kundedatabase]
GROUP  BY matchnavn1
HAVING Count(*) > 1

go

UPDATE p
SET    p.[Unik_KundeID] = m.[min_Unik_RecordID],
      p.[Unik_KundeIDmatchtype] = '01_Matchnavn1'
FROM  [dbo].[kundedatabase] p,
      [dbo].[temp_matchtabel] m
WHERE  p.matchnavn1 = m.matchnavn1

go

DROP TABLE [dbo].[temp_matchtabel]

go

SELECT Min(Unik_RecordID) AS Min_Unik_RecordID,
      matchnavn2,
      Count(*)          AS antal
INTO  [dbo].[temp_matchtabel]
FROM  [dbo].[kundedatabase]
GROUP  BY matchnavn2
HAVING Count(*) > 1

go

UPDATE p
SET    p.[Unik_KundeID] = m.[min_Unik_RecordID],
      p.[Unik_KundeIDmatchtype] = '02_Matchnavn2'
FROM  [dbo].[kundedatabase] p,
      [dbo].[temp_matchtabel] m
WHERE  p.matchnavn2 = m.matchnavn2

go


Er der nogle der har forslag til hvad jeg kan gøre for heletiden at være sikker på jeg får dat laveste ID på alle dubletter ligemeget om de er fundet på matchnavn1, matchnavn2 eller matchnavn3?


på forhånd tak :)
Avatar billede lllund Nybegynder
16. oktober 2013 - 09:47 #1
Hej

jeg vil gerne uddybe yderligere hvis det kan hjælpe? :)
Avatar billede lllund Nybegynder
28. oktober 2013 - 12:29 #2
når jeg lukker den igen :/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester