Hitta dubbletter med GROUP BY i SQL Server

Det finns olika gånger när vi behöver hitta dubbla poster i SQL Server. Det är möjligt att hitta dubbletter med DISTINCT, ROW NUMBER samt GROUP BY närma sig.

Duplicerade poster kan skapa problem ibland när du visar rapporter eller utför en uppdatering med flera satser. Att hitta dubbla poster i en databas behöver ytterligare undersökning. I vissa fall är dubblerade poster positiva, men allt beror också på data och databasdesign.

Om en kund till exempel har beställt samma produkt två gånger samma datum med samma frakt- och faktureringsadress, kan det leda till en duplikatpost.

Låt oss skapa ett bord Kund med fält för efternamn, efternamn och mobilnummer.

SKAPA TABELLKUND (Förnamn VARCHAR (50), LastName VARCHAR (50), MobileNo VARCHAR (15)); INSERT INTO KUNDVÄRDEN ('Niraj', 'Yadav', 989898); INSERTERA I KUNDVÄRDEN ("Chetan", "Gadodia", 959595); INSERTERA I KUNDVÄRDEN ("Chetan", "Gadodia", 959595); INSERTERA I KUNDVÄRDEN ('Atul', 'Kokam', 42424242); INSERTERA I KUNDVÄRDEN ('Atul', 'Kokam', 42424242); INSÄTT I KUNDVÄRDEN ("Vishal", "Parte", 9394453); INSÄTT I KUNDVÄRDEN ("Vishal", "Parte", 9394453); INSÄTT I KUNDVÄRDEN ("Vishal", "Parte", 9394453); INSERTERA I KUNDVÄRDEN ("Jinendra", "Jain", 121212); INSERTERA I KUNDVÄRDEN ("Jinendra", "Jain", 121212); VÄLJ * FRÅN KUNDEN;

Använda DISTINKT tillvägagångssätt kan vi snabbt få unika rader i ett bord.

VÄLJ DISTINCT Förnamn, LastName, MobileNo FRÅN KUND;

Detta visar emellertid inte hur många gånger en rad har duplicerats. Med hjälp av GROUP BY-metoden kan vi hitta det här.

Hitta dubbletter med GROUP BY

Lägga till gruppering och ett räkningsfält i vår visning av kombinationen FirstName, LastName och MobileNo visar hur många gånger varje kunds namn visas.

SELECT Förnamn, LastName, MobileNo, COUNT (1) som CNT FRÅN KUNDGRUPP AV FÖRNAMN, SÖKNAMN, MobilNo;

GROUP BY visar bara en post för varje kombination av FirstName, LastName och MobileNo.

CNT-talet visar hur många gånger raden har duplicerats.
CNT = 1 indikerar att raden endast visas en gång.

Låt oss filtrera ut med Har klausul att utesluta rader som bara visas en gång.

SELECT Förnamn, LastName, MobileNo, COUNT (1) som CNT FRÅN KUNDGRUPP AV FÖRNAMN, SÖKNAMN, SÄKERHETSNOT HAR COUNT (1)> 1;