Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Zorro32 am Juli 22, 2013, 17:45:52

Titel: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 22, 2013, 17:45:52
Hallo zusammen,

als Neuling in Sachen Access und SQL usw. bin ich grad am Rande der Verzweiflung... ???

Ich habe bereits eine Abfrage erstellt die mir anzeigt was jeder Kunde an Umsatz pro Artikel macht...

Jetzt würde ich gerne die besten fünf (können auch drei sein) Umsatzprodukte pro Kunde wissen!

Als Anhang habe ich meinen Wunsch zur Veranschaulichung angehangen. Leider konnte ich im Internet nichts finden was ich verstanden habe! Deswegen werfe ich dieses Thema mal in dieses Forum.

Es wäre schön wenn jemand die Herausforderung annehmen könnte!?

Vielen Dank schon mal im Voraus


[Anhang gelöscht durch Administrator]
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Stapi am Juli 22, 2013, 18:54:08
Hallo Zorro32

Willkommen hier im Forum

Zu deinem Problem.
1.) Verabschiede dich bei Access von Ecxel und deren Darstellung
2.) Erstelle eine Tabelle mit deine Apotheken
3.) Eine weitere Tabelle mit den Artikeln die dises Bezogen hat (zu der Tabelle Apotheke 1:n Artikel)
4.) Erstelle eine Gruppierte Abfrage nach abverkauften/ gelieferten Stückzahlen
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: MzKlMu am Juli 22, 2013, 19:07:26
Hallo,
ich gehe noch einen Schritt weiter, eigentlich sind hier 3 Tabellen erforderlich.

- Apotheken
- Artikel
- BezogeneArtikelMengen

In Tabelle 3 wird ein Fremdschlüssel zur Apo und ein Fremdschlüssel zum Artikel sowie die bezogene Menge erfasst. Das ist eine klassische n:m Beziehung.
Mit der 3 Tabelle kannst Du dann Dein Vorhaben erfüllen.

Zitatals Neuling in Sachen Access und SQL usw. bin ich grad am Rande der Verzweiflung...
kein Wunder, Access (SQL) benötigt eine normalisierte Tabellenstruktur.
Mit dem vorliegenden Aufbau ist Dein Vorhaben nicht zu realisieren.
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 22, 2013, 19:27:06
Hallo Stapi, Hallo MzKlMu,

vielen Dank für Eure Rückmeldung :)

Grundsätzlich will ich diese Abfrage nur durch Access durchführen lassen. Das Excel-"Beispiel" war nur zur Veranschaulichung meines Anliegens.

Ich habe bereits meine Abfragen so kontruiert dass das Ergebnis mir alle Kunden anzeigt mit dem Umsatz pro Artikel. Das ist meine erste Abfrage die eine Kreuztabelle als Lösung hergibt. (hier ist auch eine 1:n Abfrage enthalten)

Damit weiss ich was jeder Kunde bezogen hat! jetzt will ich eine Abfrage erstellen die mir pro Kunde sagt welche Artikel er meiste eingekauft hat.

Geht dies überhaupt mit Access?...oder war deine Andeutung in Punkt eins daruf dass dies gar nicht machbar ist in Access!?

Also jetzt hab ich drei Tabellen erstellt. und es werden mir jetzt pro Kunde alle Artikel aufgelistet mit dem zugehörigen Umsatz...hatte ich vorher auch...aber die Struktur ist lt. Euren Aussagen sehr wichtig also wie befohlen erledigt :-)

Aber wasmuss ich jetzt machen um mir die besten drei pro Apotheke anzeigen lassen?
Kunden gruppiert, Artikel gruppiert und Umsatz Summe....???



Danke Für Eure Mühen:-)
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: MzKlMu am Juli 22, 2013, 19:37:34
Hallo,
zeige mal, wie die Zusammefassungstabelle jetzt aussieht.
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 22, 2013, 20:22:53
so sieht sie jetzt aus...

...mittlerweile würde es mir erstmal helfen wenn die Abfrage mir pro Kunde den höchsten Artikel ausweisen würden...also den Top Artikel!....

Die Rangfolge ist für mich mittlerweile ein Traum :-\

Danke

[Anhang gelöscht durch Administrator]
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 23, 2013, 22:21:28
Hallo Community,

Gibt es echt keine Lösung für mein Problem? ?? ??? :'(
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: ebs17 am Juli 24, 2013, 09:32:34
Deine bisherigen Darstellungen mögen dazu ausreichen, darzustellen, was Du in etwa möchtest. Für einen konkreten Vorschlag sind sie unzureichend: Abfragen erstellt man auf richtige Tabellen, mit bekannten Beziehungen und Datenmodell und mit verwendungsfähiger ID und so.

Da das Abstaktionsvermögen einzelner beschränkt ist, ist dann sehr schnell eine Demo notwendig, wo man gewisse Dinge real ausprobieren kann.
Wer da eigentlich eine Idee nachfragt und dann die Erwartung hat, der Ideengeber macht auch gerne simple Routinearbeiten und baut eine solche Demo zusammen, kann u.U. sehr lange warten. Bei einer "üblichen" Arbeitsteilung kann es dagegen u.U. sehr schnell gehen.

MfGA
ebs
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 24, 2013, 12:00:33
Hallo ebs,

vielen Dank für den Wink mit dem Zaunpfahl und damit für deinen Tipp ;-)

Ich habe jetzt mal Ein Beispiel meiner Datenbank erarbeitet...vielleicht hilft des besser!? (ich musste sie leider koprimieren da sie über 200KB war) und dann noch eine zusammenfassung in einer Exceldatei!...Jetzt sind es nur noch TOP3 Produkte...aber ich denke das kann ich dann anpassen!

Ich hoffe Euch alle hiermit unterstützt zu haben mir bei meinem Wunsch zu helfen.

VIELEN LIEBEN DANK!


[Anhang gelöscht durch Administrator]
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: ebs17 am Juli 24, 2013, 13:17:08
Autoanzahlen und Artikelumsätze sind für mich aber recht unterschiedliche Zielgrößen.

MfGA
ebs
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: Zorro32 am Juli 24, 2013, 15:01:16
Hallo ebs,

Danke für deine Mühe :)

Die Umsätze haben hier keine Bedeutung ....war nur fürs Beispiel.

Mein wunsch ist für die einzelnen Kunden  eine rangfolge, hier nach Menge,  der gekauften Artikel, hier Autos!

Also die top drei Produkte pro Kunde ;D

Das wäre wundervoll :D
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: ebs17 am Juli 24, 2013, 17:11:22
Zusätzliche Eingangsbemerkungen:
- Die Verknüpfungstabelle Faktura enthält überflüssige Felder (Accountname). Dafür fehlt eine Datensatz-ID (so etwas kann man in Abfragen recht häufig gebrauchen).
- Aus drei Datensätzen die TOP 3 zu ermitteln ist wie Schattenboxen. Man könnte da auch die Hände ruhig halten.

TOP2-Abfrage: Hier wird erst in der Tabelle Faktura gerechnet, ehe die Klarnamen aus den anderen Tabellen hereinverknüpft werden.
SELECT
    K.Accountname,
    A.Artikelname,
    Q.Artikelmenge
FROM
    (Kundenliste AS K
        INNER JOIN
            (
                SELECT
                    F.PartnerID,
                    F.Artikelnummer,
                    F.Artikelmenge
                FROM
                    Faktura AS F
                WHERE
                    F.Fak_ID IN
                        (
                            SELECT TOP 2
                                X.Fak_ID
                            FROM
                                Faktura AS X
                            WHERE
                                X.PartnerID = F.PartnerID
                            ORDER BY
                                X.Artikelmenge
                        )
                    ORDER BY
    1, 3 DESC) AS Q
    ON K.PartnerID = Q.PartnerID)
    INNER JOIN Artikel AS A
    ON Q.Artikelnummer = A.Artikelnummer


Für die Rangfolgen-Kreuztabelle muss man aber anders beginnen, nämlich mit einer Rangfolgenermittlung. Dabei stellt sich die Frage (wie oben auch schon), wie man mit gleichen Werten umgeht: Es könnte ja zehn Zweite geben.
Hier habe ich es so gelöst, dass die Artikelnummer (willkürliche, aber gleichbleibende Reihenfolge) als zweites Rangkriterium verwendet wird.
TRANSFORM
    Min(Artikelname) AS MinvonArtikelname
SELECT
    Accountname
FROM
    (
        SELECT
            K.Accountname,
            R.Rang,
            A.Artikelname
        FROM
            (Kundenliste AS K
                INNER JOIN
                    (
                        SELECT
                            F.PartnerID,
                            F.Artikelnummer,
                            F.Artikelmenge,
                            (
                                SELECT
                                    COUNT(*)
                                FROM
                                    Faktura AS X
                                WHERE
                                    X.PartnerID = F.PartnerID
                                        AND
                                    X.Artikelmenge + X.Artikelnummer / 1000 > F.Artikelmenge + F.Artikelnummer / 1000
                            )
                            + 1 AS Rang
FROM
    Faktura AS F) AS R
    ON K.PartnerID = R.PartnerID
            )
            INNER JOIN Artikel AS A
            ON R.Artikelnummer = A.Artikelnummer) AS Y
GROUP BY
    Accountname
PIVOT
    Rang

Diese Abfrage sollte funktionieren, allerdings steigt bei mir der SQL-Interpreter aus (zu komplex?).
Wenn ich das Ergebnis der Unterabfrage Y per Tabellenerstellungsabfrage in eine neue Tabelle "Rangfolge" ablege und diese in der Kreuztabellenabfrage verwende, dann kommt man auch zu einem Ergebnis:
SELECT
    K.Accountname,
    R.Rang,
    A.Artikelname
INTO
    Rangfolge
FROM
    (Kundenliste AS K
        INNER JOIN
            (
                SELECT
                    F.PartnerID,
                    F.Artikelnummer,
                    F.Artikelmenge,
                    (
                        SELECT
                            COUNT(*)
                        FROM
                            Faktura AS X
                        WHERE
                            X.PartnerID = F.PartnerID
                                AND
                            X.Artikelmenge + X.Artikelnummer / 1000 > F.Artikelmenge + F.Artikelnummer / 1000
                    )
                    + 1 AS Rang
FROM
    Faktura AS F) AS R
    ON K.PartnerID = R.PartnerID
    )
    INNER JOIN Artikel AS A
    ON R.Artikelnummer = A.Artikelnummer

TRANSFORM
    Min(Artikelname) AS MinvonArtikelname
SELECT
    Accountname
FROM
    Rangtabelle
GROUP BY
    Accountname
PIVOT
    'Topartikel ' & Rang


MfGA
ebs
Titel: Re: TOP 5 Produkte pro Kunde
Beitrag von: ebs17 am Juli 24, 2013, 23:23:05
Bezugnehmend auf Deine PN (Du hättest besser hier einen Beitrag eingestellt):

Du passt Bezeichnungen von der Demo an reale in der Realdatenbank an.
ZitatKönntest Du mir evtl. kurz einen Nebenvermerk oder so machen!? z.B. PartnerID(aus Kundentabelle) ...Partner ID(aus Fakturatabelle)

Die Felder sind da, wo es notwendig ist, durchaus qualifiziert (d.h. der Tabellenname ist vorangestellt), allerdings über Aliase, vergleiche Grundlagen - SQL ist leicht (2) - Alias (http://www.ms-office-forum.net/forum/showthread.php?t=298432).

Im Ergebnis solltest Du nur sichtbare Feldnamen und Tabellennamen abändern und die Aliase schön in Ruhe lassen. Da hat man nebenbei auch weniger Arbeit.

MfGA
ebs