Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Ta bort dubletter mha SQL

Postades av 2004-05-04 10:18:57 - Daniel Johansson, i forum access, Tråden har 3 Kommentarer och lästs av 5547 personer

Hej

Jag har ett enkelt problem som jag undrar om någon kan hjälpa mig med.
Jag har en tabell av typen (SCHEMATISKT)

ID VÄRDE1 VÄRDE2
1 10 11
1 12 13
2 104 105
3 1006 1007

Nu är det så att jag vill radera alla poster som har samma ID. Jag vill
ha ett unikt ID och bara ett värdepar till det ID-numret. Det spelar ingen
roll i exemplet ovan om ID 1 får värde (10,11) eller (12,13)

Rensa dubletterna helt enkelt, dubletter som ibland kan vara tripletter osv.

Jag har provat exemplet
SELECT * from Tabell
WHERE ID IN
(SELECT ID FROM Tabell GROUP BY ID HAVING COUNT(*) <= 1);

Men det ger mig bara en tabell med de ID-n som är unika och dess värden
inte även ett värde av de som är fler än en sas.

Förstår ni vad jag menar? Tabellen ska ex se ut så här.

ID VÄRDE1 VÄRDE2
1 10 11
2 104 105
3 1006 1007


Tacksam för svar
// Daniel


Svara

Sv: Ta bort dubletter mha SQL

Postades av 2004-05-04 10:42:53 - Mikael Wedham

Exemplet gjort för SQL Server!
Det borde funka ungefär såhär i Access också...

/micke

<code>
create table t
(idcol int not null,
v1 int not null,
v2 int not null)

insert into t values(1,13,15)
insert into t values(1,13,16)
insert into t values(2,23,24)
insert into t values(2,23,24)
insert into t values(3,31,37)
insert into t values(3,33,36)
insert into t values(3,35,36)
insert into t values(4,41,42)
insert into t values(5,53,59)

--Loopa tills alla dubletter är väck
while (select count(*) from
(select idcol from t group by idcol having count(*) > 1) x)
> 0
BEGIN

--Visa vilken rad som kommer raderas nästa gång (kan tas bort)
select top 1 idcol, v1, v2 from
(
select idcol, v1, v2 from t
where idcol in (select idcol from t group by idcol having count(*) > 1)
) temptabell
order by idcol, v1, v2

--Ta bort raden...
--Du måste ha en where/and för varje kolumn, för att inte råka ta bort fler rader.
--Detta funkar bara om inte raderna är helt lika.
--Finns det 2 likadana rader (exakt lika) så kommer båda att tas bort.
--Tyvärr finns inte någon bot mot just det problemet
--Kolla att rad 2 kommer försvinna helt...
delete from t
where idcol = (select top 1 idcol from
(
select idcol, v1, v2 from t
where idcol in (select idcol from t group by idcol having count(*) > 1)
) temptabell1
order by idcol, v1, v2
)
AND v1 =(select top 1 v1 from
(
select idcol, v1, v2 from t
where idcol in (select idcol from t group by idcol having count(*) > 1)
) temptabell1
order by idcol, v1, v2
)
AND v2 =(select top 1 v2 from
(
select idcol, v1, v2 from t
where idcol in (select idcol from t group by idcol having count(*) > 1)
) temptabell1
order by idcol, v1, v2
)

end

--Kontroll på att tabellen är OK.
select * from t
drop table t
</code>


Svara

Sv: Ta bort dubletter mha SQL

Postades av 2004-05-04 16:10:02 - Andreas Hillqvist

Följande fråga plockar ut de värden som skall behandlas:
<code>
SELECT Main.*
FROM TabellNamn AS Main
WHERE Main.ID IN (SELECT Sub.ID
FROM TabellNamn AS Sub
GROUP BY Sub.ID
HAVING COUNT(*) > 1);
</code>


Allt hade varit enklare om du oxå haft en unik primär. Du kan ju eventuellt tillfälligt skapa en sådan.

Om du har en unik nyckel tar du bort alla dubletter utan den första med hjälp av följa fråga:

<code>
SELECT Main.*
FROM TabellNamn AS Main
WHERE Main.ID IN (SELECT Sub.ID
FROM TabellNamn AS Sub
GROUP BY Sub.ID
HAVING COUNT(*) > 1) AND NOT Main.UniktID IN (SELECT Min(Sub.UniktID)
FROM TabellNamn AS Sub
GROUP BY Sub.ID);
</code>

Men det går även att göra en distinktion med hjälp av flera fält:

<code>
SELECT Main.*
FROM TabellNamn AS Main
WHERE NOT EXISTS (SELECT Null
FROM (SELECT SubSub.ID, First(SubSub.VÄRDE1) AS VÄRDE1, First(SubSub.VÄRDE2) AS VÄRDE2
FROM TabellNamn AS SubSub
GROUP BY Sub.ID) AS Sub
WHERE Sub.ID=Main.ID AND Sub.VÄRDE1=Main.VÄRDE1 AND Sub.VÄRDE2=Main.VÄRDE2);
</code>




Svara

Sv: Ta bort dubletter mha SQL

Postades av 2004-05-04 16:25:00 - Daniel Johansson

Tack så mycket

Däremot var jag tvungen att snurra på formen
(samtliga poster - totala antalet unika poster)

Då fick jag till det! Jag hann inte läsa din lösning Andreas

// DJ


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 769
27 960
271 761
949
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies