für jede Kategorie ein Minimum

Maik_2

Neuer Benutzer
Beiträge
4
Hi,

ich habe ein Problem zu einer DB Abfrage

Ich habe 3 Tabelle..... TabA (AID, Bezeichnung), TabB (BID, Preis, AID, CID), TabC(CID, Name)

(in TabB ist die AID,CID der Fremdschlüssel )

TabA hat 3 Kategorien 1,2 und 3.

in TabB stehen die Angebote die C macht.

was ich möchte....

für jeden Abschnitt den niedrigsten Preis und Name

klappt auch soweit...nur der Name wird mir nie richtig angezeigt, immer nur der erste Name in der tabelle, also immer NameA ....

select MIN(Preis), Namen from TabA
inner Join TabB on TabA.AID=TabB.BID
inner Join TabC on TabB.BID=TabC.BID
group by TabB.AID;

EDIT ----------^

ich hoffe mein Problem wurde verstanden und mir kann geholfen werden

Vielen Dank
 
Zuletzt bearbeitet:
Werbung:
select MIN(Preis), Namen from TabA
inner Join TabB on TabA.AID=TabB.BID
inner Join TabC on TabB.BID=TabC.BID
group by TabB.BID;


ich hoffe mein Problem wurde verstanden und mir kann geholfen werden

Vielen Dank

Dein Select ist gemäß der SQL-Norm syntaktisch falsch. In Aggregationen müssen alle Spalten des Resultats entweder aggregiert oder gruppiert werden. Das tust Du nicht. Offenbar ist Access neben MySQL zu doof, das zu sehen und liefert falsche Resultate.
 
jo das ist richtig...ich habe mich vermutlich undeutlich ausgedrückt was ich genau will.

ich habe 3 Kategorien 1,2 und 3

und die in C stehenden Namen machen verschiedene Angebote für die Kategorien:

Kategorie 1: XYZ Angebot für 1800
MNO Angebot für 1700

Kategorie 2: ABC Angebot für 500
XYZ Angebot für 550

und für jede Kategorie soll mir der niedrigste Preis MIT Namen angezeigt werden.

wenn ich group by name mache...werden die kategorien nicht berücksichtigt, wenn ich dazu noch die kategorien gruppiere wird mir alles angezeigt

Vielen Dank für die Hilfe
 
und für jede Kategorie soll mir der niedrigste Preis MIT Namen angezeigt werden.

wenn ich group by name mache...werden die kategorien nicht berücksichtigt, wenn ich dazu noch die kategorien gruppiere wird mir alles angezeigt

Vielen Dank für die Hilfe

Kann deine Datenbank analytische / Window-Funktionen? Dann kannst Du z.B. mit rank() oder row_number() je Kategorie arbeiten. Kann eigentlich jede halbwegs aktuelle DB - außer MySQL.
 
Werbung:
Ungefähr so:
Code:
SELECT    t.kategorie,
        t.preis,
        c2.name AS anbieter
FROM    (
SELECT    a1.AID,
        a1.name AS kategorie,
        min(b1.preis) AS preis
FROM    TabA a1
LEFT JOIN TabB b1
ON        a1.AID = b1.AID
GROUP BY a1.AID,a1.name
) t
LEFT JOIN TabB b2
ON        t.AID = b2.AID
LEFT JOIN TabC c2
ON        b2.CID = c2.CID
Der Select für t liefert erstmal nur zu jeder Kategorie den niedrigisten Preis und der äußere Select holt alle Anbieter die den niedrigsten Preis haben.
 
Zurück
Oben