Announcement

Collapse
No announcement yet.

Tabelle für Preisfindung umsortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabelle für Preisfindung umsortieren

    Hallo Forum,
    ich kaue gerade an einem Problem.
    Aus einer Preisliste möchte ich den derzeit gültigen Preis ermitteln.
    Dies hat so
    [highlight=sql]
    ...

    SQL select :FIELDS,
    //
    isnull((SELECT min(p.artilispreis)
    FROM artikel a1 JOIN ArtiListenPreis p
    ON ( a.ArtiLisPrGrupVK = p.ArtiLisPrGruppe )
    WHERE p.preislisnummer=1 and p.artilisprbisdat>today()
    AND a1.artikelid=a.artikelid),0 ) AS Preis1,
    //
    isnull((SELECT min(p.artilispreis)
    FROM artikel a1 JOIN ArtiListenPreis p
    ON ( a.ArtiLisPrGrupVK = p.ArtiLisPrGruppe )
    WHERE p.preislisnummer=2 and p.artilisprbisdat>today()
    AND a1.artikelid=a.artikelid),0 ) AS Preis2,
    //
    ...
    [/highlight]

    bisher gut geklappt. Bis dann diese Jahr folgendes geschah.
    Es wurde ein Preis eingepflegt, welcher nur für 2012 gültig ist.
    Artilistenpreis.jpg
    (http://www.curt-balluff.de/816/Artilistenpreis.jpg)
    Die Spaltenüberschriften werden nicht komplett angezeigt aber ich denke man sieht trotzdem, was zusammen gehört

    Die Abfrage findet aber nur den Preis, welcher bis 2099 gültig ist (Zeile 2).
    Ich wollte daher die Tabelle ArtiListenPreis mit ORDER BY nach
    p.artilisprbisdat sortieren, weil ich dachte, dass dann der Wert für 2012 als erster gefunden wird.
    Ich habe aber keine Ahnung, wie ich das in den bestehenden Code hineinpfriemeln kann:
    Hat mir jemand eine Idee?
    Ich freue mich über jeden Tipp
    Curt

  • #2
    Möglicherweise Lösung gefunden

    Ich habe noch ein wenig rumprobiert und das Problem - wahrscheinlich - mit min() gelöst.
    Achtung Code etwas chaotisch, da ich von SQL nicht wirklich Ahnung habe:
    [highlight=sql]
    isnull((SELECT min(p.artilispreis)
    FROM artikel a1 JOIN ArtiListenPreis p
    ON ( a.ArtiLisPrGrupVK = p.ArtiLisPrGruppe )
    WHERE p.preislisnummer=1 AND
    ((SELECT min(p2.artilisprbisdat) FROM ArtiListenPreis p2
    where a.ArtiLisPrGrupVK = p2.ArtiLisPrGruppe and p2.artilisprbisdat>today()
    AND p2.preislisnummer=1)=p.artilisprbisdat)
    AND
    ((SELECT max(p3.artilisprabdat) FROM ArtiListenPreis p3
    where a.ArtiLisPrGrupVK = p3.ArtiLisPrGruppe and p3.artilisprbisdat=p.artilisprbisdat
    AND p3.preislisnummer=1)=p.artilisprabdat)
    AND a1.artikelid=a.artikelid),0 ) AS Preis1,
    [/highlight]

    Mit dem SELECT min() suche ich das kleinste Datum (artilisprbisdat) , welches größer als today() ist und suche dann den Satz mit diesem Wert in artilisprbisdat.
    Das ist meine Theorie. Ich weiß jetzt nicht, ob ich jetzt nur zufällig das richtige Ergebnis erhalte, oder ob man das so machen kann, denn meine SQL Kenntnisse sind ... siehe oben. (Aber das sieht man sicher auch am Code)
    Könnt Ihr mal bitte eine blick auf mein "Werk" richten.
    Vielen Dank
    Curt
    Zuletzt editiert von curbal; 16.08.2012, 15:24.

    Comment

    Working...
    X