PDA

Vollständige Version anzeigen : Wenn Abfrage


monaco
26.06.2001, 20:27
Hallo Leute bitte um Hilfe !
Folgendes Problem:
Daten werden zur Rechnungserstellung in einer Abfrage aufbereitet;
in der Tabelle Kunden gibt es Rabattfelder für die Rabatt-Kategorien 1-20
Nun soll meine Abfrage bei Rechnungserstellung die Kategorie Abfragen und danach den Rabatt Richtig zuordnen; Funktioniert auch - nur bis Artikel-Kategorie Nr. 14 dann kommt Meldung das Abfrage zu komplex ist:

Rabatt: Wenn([Artikel].[Kategorie-Nr]=1;[Kunden].[Rab1];Wenn([Artikel].[Kategorie-Nr]=2; etc.

Bitte um Hilfe bzw. um Rat wie ich diese Abfrage dazu bewegen kann, daß ich 20 Kategorien abfragen kann.

Vielen Dank

Morli
26.06.2001, 20:43
Hallo monaco,

Du solltest Dir noch eine Tabelle anlegen, die ien Verknüpfung zwischen den Kategorie-Nr und Rabatten darstellt (Felder Kategorie-Nr. und Rabatte).
Wenn Du diese dann in deine Abfrage einbindest ersparst Du dir den Ganzen Wenn-Dann Kram und die Abfrage läuft.

Gruß

Rainer ;)

monaco
26.06.2001, 20:52
Hallo Rainer !

Danke für deine Antwort; doch einen Haken hat die Sache;
Jeder Kunde hat spezifische Rabatte

ich habe ja eine Tabelle Kategorien; nutze diese als Nachschlagefeld bei dem Artikelstamm -> ordne dort jedem Artikel die globale Kategorie zu und erst im Kundenstamm wird dann der Prozentsatz herausgelesen
Hast du vielleicht noch einen rat ??
Danke
Robert

Morli
27.06.2001, 06:34
Hallo monaco,

wie geht den Deine Wenn-Dann Bedingung weiter?

Wenn([Artikel].[Kategorie-Nr]=1;[Kunden].[Rab1];Wenn([Artikel].[Kategorie-Nr]=2;[Kunden].[Rab2];Wenn(u.s.w.?

Entspricht also die Kategorie-Nr. der Rab-Nr.?

Poste doch mal kurz einen Überblick über die Struktur (nur Feldnamen) der relevanten Tabellen!

Gruß

Rainer ;)

C. Palmetshofer
27.06.2001, 06:52
Hallo Leute,

das mit der Tabelle finde ich gut, allerdings muß der Rabatt je Kategorie und Kunde angegeben werden!

Kunde
Kategorie
Rabatt

Gruss

monaco
27.06.2001, 14:12
Nun:
Habe eine Auswahlabfrage mit den Tabellen:
Artikel; Bestellungen; Bestelldetails; Kunden

In der Tabelle Artikel gibt es ein Feld Kategorie-Nr

In der Tabelle Kunden die Felder Rab1 bis Rab20; diese sollen den Kategorienummern zugeordnet sein;
z.B. Kategorie-Nr.1 = 75%, Kategorie-Nr.2 = 33 % etc.

Nun prüfe ich in der Abfrage mit einer Wenn Funktion die Kategorie-Nr ab, funktioniert auch so wunderbar; habe diese Funktion schon länger im Einsatz; nur habe Probleme haben in der Firma neue Artikel bekommen und muss nun diese Kategorien bis 20 ausweiten;
Nur ab der 15. Kategorie meldet Access das der Ausdruck zu komplex ist.

Hier die Abfrage in SQL:
SELECT [Bestellungen].[Bestell-Nr], [Kunden].[Kunden-Code], [Kunden].[Firma], [Kunden].[Rechtsform], [Kunden].[Kontaktperson], [Kunden].[Straße], [Kunden].[Ort], [Kunden].[PLZ], [Bestellungen].[Bestelldatum], [Bestellungen].[Versanddatum], [Bestellungen].[Lieferdatum], [Bestellungen].[Empfänger], [Bestellungen].[Straße], [Bestellungen].[PLZ], [Bestellungen].[Ort], [Bestelldetails].[Artikel-Nr], [Artikel].[Artikelname], [Artikel].[Artikelbeschreibung], [Bestelldetails].[Anzahl], [Bestelldetails].[Einzelpreis], CCur([Bestelldetails].[Einzelpreis]*[Anzahl]*(1-[Rabatt])/100)*100 AS Endpreis, [Bestellungen].[Skontobetragstext], [Bestellungen].[Abrerechnet], [Artikel].[Kategorie-Nr], IIf([Artikel].[Kategorie-Nr]=1,[Kunden].[Rab1],IIf([Artikel].[Kategorie-Nr]=2,[Kunden].[Rab2],IIf([Artikel].[Kategorie-Nr]=3,[Kunden].[Rab3],IIf([Artikel].[Kategorie-Nr]=4,[Kunden] .[Rab4],IIf([Artikel].[Kategorie-Nr]=5,[Kunden].[Rab5],IIf([Artikel].[Kategorie-Nr]=6,[Kunden].[Rab6],IIf([Artikel].[Kategorie-Nr]=7,[Kunden].[Rab7],IIf([Artikel].[Kategorie-Nr]=8, [Kunden].[Rab8],IIf([Artikel].[Kategorie-Nr]=9,[Kunden].[Rab9],IIf([Artikel].[Kategorie-Nr]=10,[Kunden].[Rab10],IIf([Artikel].[Kategorie-Nr]=11,[Kunden].[Rab11],IIf([Artikel].[Kate gorie-Nr]=12,[Kunden].[Rab12],IIf([Artikel].[Kategorie-Nr]=13,[Kunden].[Rab13],IIf([Artikel].[Kategorie-Nr]=14,[Kunden].[Rab14],0)))))))))))))) AS Rabatt, [Kunden].[Rab1], [Kunden].[Rab2], [Kunden].[Rab3], [Kunden].[Rab4], [Kunden].[Rab5], [Kunden].[Rab6], [Kunden].[Rab7], [Kunden].[Rab8], [Kunden].[Rab9], [Kunden].[Rab10], [Kunden].[Rab11], [Kunden].[Rab12], [Kunden].[Rab13], [Kunden].[Rab14], [Kunden].[Rab15], [Kunden].[Rab16], [Kunden].[Rab17], [Kunden].[Rab18], [Kunden].[Rab19], [Kunden].[Rab20], [Artikel].[Verrechnungseinheit], [Bestellungen].[Kommission]
FROM Kunden INNER JOIN (Bestellungen INNER JOIN (Artikel INNER JOIN Bestelldetails ON [Artikel].[Artikel-Nr]=[Bestelldetails].[Artikel-Nr]) ON [Bestellungen].[Bestell-Nr]=[Bestelldetails].[Bestell-Nr]) ON [Kunden].[Kunden-Code]=[Bestellungen].[Kunden-Code]
ORDER BY [Bestellungen].[Bestell-Nr] DESC;

Habe da jetzt die Wenn Funktion nur bis 14 sonst werden nur Fehler gemeldet.

Kann mir den Keiner einen hilfreichen Tipp geben ??
Danke

Morli
27.06.2001, 14:37
Hallo monaco,

also mal wieder jemand, der sich nicht an die Normalisierung hält ;) (nicht böse gemeint)

Probiers doch statt der ganzen Wenn-Dann - Arie mal mit

Rabatt: DomWert("[Rab" & [Kategorie-Nr] & "]";"Kunden")

Probiers mal aus und poste das Ergebnis!

Gruß

Rainer :)

P.S. Damit würde auch dein SQl-String wesentlich kürze und übersichtlicher!