UBAI Geschrieben 14. September 2007 Teilen Geschrieben 14. September 2007 Hi, ich hab da folgendes Problem: In einer Tabelle stehen zu einem Artikel mehrere VK-Preise (Zeitliche Betrachtung, Mengenbetrachtung, Einheitenbetrachtung). Ich möchte nun per SQL den aktuell gültigen finden, bekomm das aber nicht gebacken. Hier mal die Vorgehensweise, wie er den gültigen Preis finden soll (vereinfacht, reicht mir aus) 1. Grenze VK-Preise (SP) ab auf die Artikelnummer die identisch ist mit der Artikelnummer aus der Tabelle Artikel (Item) (where SP.[item No] = Item.No) <--- kein Problem 2. Grenze ab auf das Feld SP.Einheit mit dem Feld Einheit aus der Artikeltabelle (where SP.[unit of measure Code] = Item.[sales Unit of Measure] <--- kein Problem 3. grenze ab auf das Feld Startdatum in der VK Tabelle. das muss <= dem aktuellem Datum sein oder leer (SQL wäre 1753) <--- sollte ich auch hinbekommen nun meine Probleme 4. in der gefundenen Datenmenge, grenze ab auf das Feld SP.Type mit dem Wert 3 5. Finde in der Abgrenzung den letzten Datensatz, wurde er gefunden, anzeigen, wenn nicht, grenze das FEld SP.Type ab auf den Wert 2 (die anderen Abgrenzungen beibehalten) ab. Wurde ein Datensatz gefunden, den Preis aus der SP Tabelle anzeigen, wenn keiner gefunden wurde, soll eine 0 angezeigt werden. Bereich 5 krieg ich nicht gebacken ...... :old Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 14. September 2007 Teilen Geschrieben 14. September 2007 Hi, es wäre sicherlich hilfreich, wenn Du mal ein oder zwei Datensätze, dein bisheriges SQL Statement, das Ergebnis sowie die von Dir verwendete DB postest. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
UBAI Geschrieben 14. September 2007 Autor Teilen Geschrieben 14. September 2007 ok hier mal die Struktur und paar Daten Tabelle Item Nr. Verkaufseinheitencode 11190013410 STCK Tabelle VK-Preise Artikelnr. Startdatum Verkaufsart VK-Preis Einheitencode 11190013410 16.09.06 Alle Debitoren 40,99 STCK 11190013410 22.03.07 Alle Debitoren 49,99 STCK 11190013410 10.05.07 Alle Debitoren 55,00 STCK 11190013410 10.06.07 Alle Debitoren 59,00 STCK 11190013410 10.09.07 Alle Debitoren 51,00 STCK 11190013410 13.09.07 Alle Debitoren 51,00 STCK 11190013410 13.09.07 Kampagne 51,00 STCK 11190013410 17.09.07 Alle Debitoren 53,00 STCK 11190013410 16.09.06 Alle Debitoren 100,00 PAAR aktuelles Datum ist der 14.09.2007 ich möchte nun zu dem selectiertem Artikel (11190013410), den heute (14.09) gültigen Preis finden für die im Artikel hinterlegte Verkaufseinheit (Stck) select Item.[Nr_], SalesPrice.[VK-Preis] from Item inner join SalesPrice on Item.[Nr_] = SalesPrice.[Artikelnr_] where SalesPrice.Einheitencode = Item.Verkaufseinheitencode and SalesPrice.Startdatum <= getdate() das ist ja alles ken problem, nur wie bekomm ich das gebacken, dass er erst nach "Kampagne" sucht und hat er die nicht gefunden für "Alle Debitoren" sucht. Das bekomm ich nicht gebacken .... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 14. September 2007 Teilen Geschrieben 14. September 2007 nehmen wir folgende Datenlage an: 11190013410 13.09.07 Kampagne 51,00 STCK 11190013410 14.09.07 Alle Debitoren 51,00 STCK Soll er für den 14.09.07 den 1. oder den 2. Satz finden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
UBAI Geschrieben 14. September 2007 Autor Teilen Geschrieben 14. September 2007 sehr gut ;-) hier erst mal de Preis der Kampagne Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 14. September 2007 Teilen Geschrieben 14. September 2007 Lösungsansatz: - du aggegiertst auf Artikel und bestimmst die "maximale" Verkaufsart - zu dem Ergebnis joinst du die Ursprungsdaten a.artikel=b.artikel AND a.verkausart=b.verkaufsart jetzt hast du alle Artikel mit der gewählten Verkaufsart (Zwischenmenge1) mit der selben Logik suchst du jetzt auch das maximale Datum, welches aber noch kleiner als das Abfragedatum ist - agg auf Artikelnummer, max(datum) where datum < eingabedatum - join der agg mit der Zwischenmenge1 auf a.artikel=b.artikel AND a.datum=b.datum Für die Logik musst du dir vorstellen, daß Verkaufsart ein Zahlenwert ist, bei dem man das Maximum bestimmen kann, notfalls muss man das vor dem ersten Schritt umsetzen Die Abfrage liefert dann für: 11190013410 13.09.05 Kampagne 51,00 STCK 11190013410 16.09.06 Alle Debitoren 40,99 STCK 11190013410 22.03.07 Alle Debitoren 49,99 STCK 11190013410 10.05.07 Alle Debitoren 55,00 STCK 11190013410 10.06.07 Alle Debitoren 59,00 STCK 11190013410 10.09.07 Alle Debitoren 51,00 STCK 11190013410 13.09.07 Alle Debitoren 51,00 STCK 11190013410 17.09.07 Alle Debitoren 53,00 STCK 11190013410 16.09.06 Alle Debitoren 100,00 PAAR -> 11190013410 13.09.05 Kampagne 51,00 STCK und für: 11190013410 13.09.05 Kampagne 51,00 STCK 11190013410 16.09.06 Alle Debitoren 40,99 STCK 11190013410 22.03.07 Alle Debitoren 49,99 STCK 11190013410 10.05.07 Alle Debitoren 55,00 STCK 11190013410 10.06.07 Alle Debitoren 59,00 STCK 11190013410 13.06.07 Kampagne 51,00 STCK 11190013410 10.09.07 Alle Debitoren 51,00 STCK 11190013410 13.09.07 Alle Debitoren 51,00 STCK 11190013410 16.09.06 Alle Debitoren 100,00 PAAR 11190013410 17.09.07 Alle Debitoren 53,00 STCK -> 11190013410 13.06.07 Kampagne 51,00 STCK und für: 11190013410 16.09.06 Alle Debitoren 40,99 STCK 11190013410 22.03.07 Alle Debitoren 49,99 STCK 11190013410 10.05.07 Alle Debitoren 55,00 STCK 11190013410 10.06.07 Alle Debitoren 59,00 STCK 11190013410 10.09.07 Alle Debitoren 51,00 STCK 11190013410 13.09.07 Alle Debitoren 51,00 STCK 11190013410 16.09.06 Alle Debitoren 100,00 PAAR 11190013410 17.09.07 Alle Debitoren 53,00 STCK -> 11190013410 17.09.07 Alle Debitoren 53,00 STCK Falls es für diese Art von Abfrage ein fertiges (standard) SQL-Kommando gibt, bitte mal posten, in der Hinsicht kenne ich mich nur wenig aus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
true-playa Geschrieben 17. September 2007 Teilen Geschrieben 17. September 2007 Mach doch zuerst ein Subquerie auf die aktuell gültigen Werte mit dem aktuellen Datum und dann ne Abfrage auf diese... SELECT * FROM item WHERE (startdatum, verkaufsart, einheitencode, artikelnr) IN (SELECT MAX(startdatum) AS startdatum, verkaufsart, einheitencode, artikelnr FROM item a WHERE startdatum <= NOW() GROUP BY verkaufsart, einheitencode, artikelnr) mit der Abfrage solltest du alle aktuellen Preise jedes Artikels hinterlegt bekommen. Wenn du nur von einem bestimmten Artikel die Preise bekommen möchstest mach in das Subquerie noch die Bedingung artikelnr=12354 und du bekommst die Preise für eben nur diesen Artikel Im Ergebniss ist dann der aktuelle Preis der Kampagne und allen Debitoren zu finden. Du kannst dann ja das verwenden wie du es brauchst... Hoffentlich hab ich die Frage überhaupt richtig verstanden Gruß Florian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.