Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 6
  • 501

Na przykład w przypadku prostej bazy danych, w której występuje kolumna klienci, wartości umów, chciałbym uzyskać za pomocą kwerendy uzyskać tabelę, w której:

  • klienci zostaną posortowani w kolejności od najwyższej łącznej wartości umów,
  • w podsumowaniu wystąpiłyby kolumny: klient, łączna wartość umów, łączny(narastający,cumulative) procent wartości wszystkich umów.

Problem:

Jak w SQL Accessie uzyskać narastający procent (również ciekawe, jak uzyskać narastającą sumę) w osobnej kolumnie, obok sum posortowanych od najwyższej np. w celu odcięcia, zgodnie z zasadą Pareto, najlepszych 20% albo najlepszych 80%?

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

Odpowiedzi (3)

  • 4

W samym SQL-u chyba trudno to skonstruować. Ale można np. w raporcie dodać pole tekstowe  z ustawionym w jego właściwościach atrybutem "suma bieżąca" (Running Sum). I teraz w zależności od źródła danych dla takiego pola oraz miejsca jego umieszczenia (szczegóły, stopka grupy, stopka raportu) możemy uzyskać narastające sumy jakiejś wartości rekordu, grupy itp. Można również w ten sposób skonstruować np. sumę folio czy "liczbę porządkową" dla rekordów wyświetlanych w raporcie, co wcale nie jest łatwe do osiągnięcia w inny sposób.

dnstudio
  • Odpowiedział
  • @ dnstudio | 14.08.2014
    • 5
    • 1
    • 2
  • 15
  • Odpowiedział
  • @ | 08.09.2014
  • TRENER MODERATOR ALTKOM AKADEMII
Komentarze
Dziękuję. Jednak chciałbym dopytać, czy jest możlwe uzykanie sumy narastającej nie w formularzu tylko w nowej, dynamicznie tworzonej w SQL tabeli?
Skomentował : @ Jacek_Kotowski ,08.09.2014
  • 60
  • 54
  • 94
  • 15

Witam.

W takim razie dla dynamicznie tworzonej tabeli proponuję dołożyć polecenie SQL:

ALTER TABLE tb_Dane ADD COLUMN Nazwa_kolumy(np "Suma_nar") typ danych (w tym wypadku LONG lub DOUBLE)

A nast następnie wykonanie na tej tabeli procedury, która w pętli uzupełni wartości:

Sub Wykonanie()

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tb_dane")
Dim dane_z_tabeli As Long
dane_z_tabeli = 0


    Do Until rs.EOF = True
        
        'Aktualziacja wartości sumy do wpisania do kolumny
        dane_z_tabeli = rs("Dane_Liczbowe") + dane_z_tabeli
        
        'Edycja
        rs.Edit
        rs("Suma_nar") = dane_z_tabeli
        rs.Update

    
        'przejście do następnego
        rs.MoveNext
    Loop




rs.Close 'Zamknięcie recordst-u
Set rs = Nothing 'czyszczenie
End Sub

W załączniku baza z przykładem.

Pozdrawiam.
Tomasz Grabowski.

  • Odpowiedział
  • @ | 08.09.2014
  • TRENER MODERATOR ALTKOM AKADEMII