Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 3
  • 97

Moja baza zawiera produkty, np.:


Rower górski x2321,

Rower górski specjalny y3233,

Deskorolka z23233,

Deskorolka specjalna wyczynowa d3212,

 

Chciałbym sumować wartości na podstawie słownika opisanego w osobnej tabelce (Table B), tabelkę tę posortowałem malejąco, licząc na to, że JOIN spowoduje podłączenie pierwszego napotkanego rekordu:

Rower górski specjalny    Total 101 088

Rower górski                  Total  291 088

Deskorolka specjalna wyczynowa Total  291 088

Deskorolka      Total 23923


Moje przykładowe Query wygląda w ten sposób:

SELECT  "" As kod, sum(b) As wartosc, TableB.Descr as opis_grupy
FROM TableA  LEFT JOIN TableB ON TableA.Descr LIKE ("*"+TableB.Descr+"*")
WHERE TableA.a IS NOT NULL
GROUP BY  TableB.Descr
ORDER BY  TableB.Descr DESC

Niestety, takie Query powoduje sumowanie wszystkich rekordów, w których występuje Rower górski, nawet tych, które występują jako Rower górski specjalny. Chciałbym, żeby te kategorie były jednak oddzielnie. Jak poprawić takie Query? Próbowałem znaleźć pomoc w sieci, np.

http://www.mrexcel.com/forum/excel-questions/417807-sql-join-question-excel-access-only-return-first-join-instance.html

Użtycie funkcji FIRST, ale niestety nie udaje mi się uzyskać poprawy. Jak poprawić takie Query, by sumowało osobno Rower górski specjalny, a osobno Rower górski?

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

Odpowiedź (1)

  • 3

Witam.

Nie przychodzi mi do głowy rozwiązanie za pomocą jednej kwerendy, ale zaproponuje sposób połączenia kilku poziomów wyszukiwania.

Metoda, którą proponuję zakłada wyszukanie najdłuższych nazw grup, a następnie wykluczenie ich z wyszukiwania w następnym poziomie.

Pierwszy element, to zliczenie ilości wyrazów w Słowniku grup (tu w zależności od danych konieczne może być zliczenie ilości znaków w wyrazie, gdy grupy nie będą różniły się liczbą wyrazów a znaków np,  grupa ABC i ADCD):

 

 

I wybranie jako pierwszy poziom tylko najdłuższych:

 

 

Następnie kwerenda grupująco-sumująca na bazie danych tylko z najdłuższych grup:

 

 


Następny krok to stworzenie listy towarów, które już zostały uwzględnione w zestawieniu grup, w celu wykluczenia ich w następnym kroku:

 

I lista towarów bez towarów przypisanych do grupy, maksymalna długość:

 


 Kolejny krok podsumowanie dla grup o 1 wyraz krótszych niż maksymalna długość na bazie listy towarów bez tych uwzględnionych w najdłuższych nazwach:

 

 

 

 

 
Kroki te będzie trzeba powtórzyć aż to ostatniej najmniejszej długości nazwy grupy.

Na koniec pozostaje jeszcze połączenie podsumować ze wszystkich długości kategorii:

 


Na koniec pewnie jeszcze się przyda kwerenda sprawdzająca, czy wszystkie towary zostały uwzględnione.

Pozdrawiam.
Tomasz Grabowski.

Załączniki

  • accdb

    Sumowanie_Po_Grupie.accdb ( 512K )
  • Odpowiedział
  • @ | 04.05.2015
  • TRENER MODERATOR ALTKOM AKADEMII