Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 4
  • 228

Jak za pomocą SQL i funkcji Accessa (jeśli możliwe również dla porównania w T-SQL) uzyskać automatyczne zliczanie rekordów?

Chodzi o uzyskanie zliczania w osobnej kolumnie od 1 do x, ponumerowanie rekordów należących do grup (np. w kolumnie grupa, mających taką samą wartość).

NAZWISKO, PŁEĆ, AutoNR_PŁEĆ

 

Kowalski, mężczyzna, 1

---------------------------

Nowak, mężczyzna, 2

--------------------------

Pietrzak, mężczyzna, 3

--------------------------

Kowalska, kobieta, 1

--------------------------

Kaczmarek, kobieta, 2

--------------------------

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 04.05.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedzi (3)

  • 12

W SQL Server 2008 lub nowszych, ten problem można rozwiązać funkcją ROW_NUMBER, wskazując grupę rekordów do numerowania w części PARTITION BY klauzuli OVER, jak w poniższym przykładzie:

SELECT Nazwisko,Plec,
ROW_NUMBER() OVER(PARTITION BY Plec ORDER BY Plec) AS AutoNR
FROM dbo.Osoby

 

  • Odpowiedział
  • @ | 04.05.2015
  • TRENER ALTKOM AKADEMII
  • 11
  • Odpowiedział
  • @ | 04.05.2015
  • TRENER ALTKOM AKADEMII
  • 12

W przypadku Accessa możliwe jest również rozwiązanie problemu oparte o samozłączenie (self-join) oraz grupowanie. Przykładowa implementacja:

SELECT p1.ID, p1.[Nazwisko], p1.[Imie], p1.plec, count(*) as NUMER
FROM Pracownicy AS p1 INNER JOIN Pracownicy AS p2 
ON p1.ID > p2.ID and p1.plec= p2.plec
GROUP BY p1.ID, p1.[Nazwisko], p1.[Imie], p1.plec
ORDER BY p1.plec

Kluczowa jest część specyfikacji złączenia ON, gdzie porównujemy (unikatowe) klucze podstawowe oraz pole płeć, dla którego numerowanie musi stanowić grupę.

  • Odpowiedział
  • @ | 04.05.2015
  • TRENER ALTKOM AKADEMII