---
title: "Slå samman dubletter i databas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/158375-slå-samman-dubletter-i-databas/page2"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "devotion"
published: "2007-03-19T19:06:37.000Z"
updated: "2007-03-21T22:04:39.000Z"
replies: 23
views: 857
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/158375-slå-samman-dubletter-i-databas"
---

# Slå samman dubletter i databas

_Sida 2 av 2._

## #21 — devotion, 2007-03-21T20:32Z

Hej igen!

Har kört lite tester idag och kommit fram till att transaktionen nog inte gör så som jag tänkt mig...

Den behandlar dubletter på hela tabellen; tblMaterial Det ska den ju iofs göra, men det ska ju vara kopplat till ett speciellt uppdrag.

Ska försöka förklara lite tydligare... :)  
Om ett uppdrag har TaskId 100 och detta har dubletter på artikelnr 0000040 ska dessa slås ihop

Uppdraget med TaskId 110 skall inte påverkas, även om artikelnr 0000040 även ingår där.

Som det är nu, tror jag att alla dubletter i tabellen slås ihop oavsett vilket TaskId de tillhör

Dvs. summerinegn skall bara göras inom samma TaskId.

Hoppas ni fattar!  :)  

Jag bifogar en bildserie där första bilden; before_trans.png visar databasen före transaktionen. after_trans.png visar resultatet efter och önskat_resultat.png visar hur jag vill att det ska bli

Mvh
Henrik

Bilagor:

- [before_trans.png](https://www.webforum.nu/a/14075.png)
- [after_trans.png](https://www.webforum.nu/a/14076.png)
- [önskat_resultat.png](https://www.webforum.nu/a/14077.png)

Permalänk: https://www.webforum.nu/p/1950075

## #22 — devotion, 2007-03-21T21:07Z

Har lagt till lite förklarande bilder... :) 

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1950078

## #23 — emission, 2007-03-21T21:56Z

Det har inte med transaktionen att göra. Den är bara ett säkerhetsbälte och påverkar på intet sätt vad resultatet av frågorna blir.

Du får helt enkelt utöka dina villkor:

```
update q set Amount = (select sum(Amount)
      from tblMaterial 
   where tblMaterial.ArtNr = q.ArtNr[b] and tblMaterial.Taskid=q.TaskId[/b])
from tblMaterial as q
```

```
delete from tblMaterial
    where id not in
          (select max(id)
              from tblMaterial as q
           where tblMaterial.ArtNr= q.ArtNr[b] and tblMaterial.TaskId= q.TaskId[/b])
```

Permalänk: https://www.webforum.nu/p/1950089

## #24 — devotion, 2007-03-21T22:04Z

Det verkar fungera perfekt!   :) 

```
DECLARE @updaterr int, @deleteerr int
BEGIN TRAN
update q set Amount = (select sum(Amount)
      from tblMaterial 
   where tblMaterial.ArtNr = q.ArtNr and tblMaterial.Taskid = q.TaskId)
from tblMaterial as q 
 where ArtNr in
    (select ArtNr
        from tblMaterial
      group by ArtNr
     having count(*) > 1)

SELECT @updaterr=@@ERROR

delete from tblMaterial
    where id not in
          (select max(id)
              from tblMaterial as q
           where tblMaterial.ArtNr = q.ArtNr and tblMaterial.TaskId = q.TaskId)

SELECT @deleteerr=@@ERROR
IF (@updaterr<>0 or @deleteerr<>0)
BEGIN
   ROLLBACK TRAN
END
ELSE
BEGIN
  COMMIT TRAN
END
```

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1950092

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/158375-slå-samman-dubletter-i-databas/page2  
Föregående sida: https://www.webforum.nu/amne/databaser-sql/158375-slå-samman-dubletter-i-databas.md
