collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 65
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14072
  • stats Beiträge insgesamt: 67582
  • stats Themen insgesamt: 9104
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.  (Gelesen 213 mal)

Offline TheSven

  • Newbie
  • Beiträge: 9
Hallo zusammen, Ich falle mal mit der Tür ins Haus und beschreibe mein Problem:
Ich möchte anhand einer Abfrage aus einer Artikel-Tabelle mit vielen Daten jeweils nur einen Topwert PRO Kategorie bekommen. Quasi möchte ich für die Kategorie Süßwaren, wovon es in der Tabelle natürlich einige gibt nur den höchsten Preis dargestellt bekommen, und das dann für alle Kategorien die ich möchte, z.B auch noch für Fisch, Fleisch, usw etc.
Eine solche Abfrage, habe ich mir mithilfe von „Select Top“ und folgender Anleitung gebaut (http://www.access-im-unternehmen.de/138.0.html) und  das klappt auch Fehlerfrei.
Nun möchte ich aber z.B das Ganze vorfiltern,  D.h ich möchte noch immer nur den Topwert pro Kategorie haben, aber für eine jeweilige Kundennummer (Diese befindet sich als Fremdschlüssel in der gleichen „Artikeltabelle“) Sobald ich das als Kriterium einschränke, beispielsweise einfach eine die jeweilige Kd. Nummern als Kriterium in der Abfrage eintippe, gibt es falsche Ergebnisse.

Komisch ist: Unabhängig voneinander funktionieren die Kriterien(Select Top zum Einen und auf KD. Nr. beschränken zum Anderen) zusammen klappt es leider nicht.

Ich habe Access Grundkenntnisse kann aber kein SQL coden, daher wäre meine Idee, dass man den Kriterieneinschränkungen evtl. eine feste Reihenfolge zuweist und es dann evtl. klappt. Kann natürlich auch total falsch sein, ist nur eine Idee.

Wie gesagt, ich besitze Grundkenntnisse und bin über jeden Vorschlag dankbar, ich lade auch gerne ein Beispiel hoch, wenn ich mich nicht verständlich genug ausgedruckt habe.

Vielen Dank im Voraus.
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 923
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #1 am: Oktober 01, 2018, 17:50:34 »
SELECT
   A.*
FROM
   tblArtikel AS A
WHERE
   A.ID IN
      (
         SELECT TOP 1
            X.ID
         FROM
            tblArtikel AS X
         WHERE
            X.KdNr = A.KdNr
         ORDER BY
            X.Preis DESC
      )
Mit freundlichem Glück Auf!

Eberhard
 
Folgende Mitglieder bedankten sich: TheSven

Offline TheSven

  • Newbie
  • Beiträge: 9
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #2 am: Oktober 02, 2018, 08:00:29 »
Vielen Dank für deine Nachricht. Freue mich über den Support. Diesen Schritt habe ich schon geschafft und das klappt auch ohne weiteres, es wird erst dann Fehlerhaft, wenn ich zusätzlich nur nach einem Kunden filtere. Z.b so, wenn ich nach Kundennummer 1 filter. Versuche hier mal ein Bild anzuhängen.


Deswegen auch die Idee, was man diese Kriterien evtl. in eine Reihenfolge schaltet. Was nämlich passiert ist, dass sich das "Select Top" Kriterium doch "einmischt" in z.B Kunde 2, auch wenn nach Kd 1 gefiltert ist, wenn der Preis des gleichen Artikels und gleiche Kategorie höher ist, als der von Kd 1. hoffe das ist im Ansatz zu verstehen.

« Letzte Änderung: Oktober 02, 2018, 08:23:48 von MzKlMu »
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 923
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #3 am: Oktober 02, 2018, 10:08:08 »
ID ist im gezeigten Ansatz als eindeutige Datensatz-ID zu verstehen. Da wären dann "Einmischungen" schon mal deutlich schlechter möglich bzw. unmöglich.
Wenn man die auszuwertenden Gruppen differenzierter gestalten möchte, muss man diese Merkmale ergänzen.
Eine Filterung nach bestimmten Kunden habe ich übersichtshalber auch eingebaut:
SELECT
   A.*
FROM
   tblArtikel AS A
WHERE
   A.Kdnr = [parID]
      AND
   A.ID IN
      (
         SELECT TOP 1
            X.ID
         FROM
            tblArtikel AS X
         WHERE
            X.KdNr = A.KdNr
               AND
            X.Kategorie = A.Kategorie
               AND
            X.Artikel = A.Artikel
         ORDER BY
            X.Preis DESC
      )
Mit freundlichem Glück Auf!

Eberhard
 
Folgende Mitglieder bedankten sich: TheSven

Offline TheSven

  • Newbie
  • Beiträge: 9
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #4 am: Oktober 05, 2018, 10:20:36 »
Vielen Dank für die 2. Version, leider bekomme ich das nicht auf meine DB umgemünzt. (Meine Kundennummer wird über ein Kombinationsfeld eingegeben und ich setze das Kriterium Formulare!MeinFormular!KombinationsfeldX

Ich habe mich mal ein bisschen in SQL eingelesen und folgenden Code "geschrieben" und der klappte auch sofort, ohne dass die Kundennummer das ganze durcheinander bringt.

Select Kategorie,MAX(Preis) FROM Tbl_Artikel GROUP BY Kategorie

Das finde ich schön einfach und auch leicht auf andere Tabellen anzuwenden. Jetzt habe ich aber das Problem, dass die Abfrage nur funktioniert, solange ich andere Felder nicht hinzufüge z.b Beschreibung Einlagerungsdatum oder Auslagerungsdatum, dann fängt die Abfrage wieder an mehrere Kategorien darzustellen.
Wenn ich die Spalten (Beschreibung, Einlagerungsdatum usw etc.) oben bei  Select hinzufüge, dann kommt die Meldung, dass ich eine Abfrage ausführen möchte, die den Ausdruck  z.B (Auslagerungsdatum) nicht als Teil der Aggregatfuntktion  einschließt.

Und da komme ich leider nicht weiter, tipp es ist recht einfach, aber ich bekomme es leider nicht hin.
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1340
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #5 am: Oktober 05, 2018, 11:24:39 »
Dann erstellst Du eine neue Abfrage und fügst Tabelle plus erstellte Abfrage hinzu. Über Kategorie und Preis ziehst Du Verknüpfungslinien auf und führst die gewünschten Felder aus der Tabelle in der Feldliste auf.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: TheSven

Offline TheSven

  • Newbie
  • Beiträge: 9
Re: Abfrage, die Topwert ausgibt und vorab nach ID gefiltert wird.
« Antwort #6 am: Oktober 15, 2018, 09:43:25 »
Danke für den Support, habe mich jetzt für eine MAX Abfrage angefreundet, die auf die ID abzielt! Problem würde ich als behoben bezeichnen.