SQL Abfrage letzter Preis für Artikel

rolandg1881

Aktiver Benutzer
Beiträge
40
Hallo !
Ich weiß ich habe dieses Thema hier schon mal gepostet und in einem anderen Forum habe ich von ukulele auch schon wertvolle Tipps bekommen. Leider komme ich nicht weiter.
Ich beschreibe "kurz" was ich möchte. Ich habe Bestellungen die aus der Tabelle Kopf (PUR) hier ist das Bestelldatum und die Nummer drin und Tabelle (PIT) hier stehen die Positionen mit den Artikeln (ID's) drin sowie die Preise und Einheiten. Sind über PUR.PK_id und PIT.FK_kopf verknüpft.
Dann gibts noch die Tabelle (ART) wo ich mir zu den ID's die Artikelnamen hole.
Ziel Preis für einen Artikel aus der letzten Bestellung. ART ist über ART.PK_id und PIT.FK_art verknüpft.

Ich habe folgenden "inneren" Select der mal die richtigen Daten liefert. Ich sehe gruppiert die letzte Bestellung (MaxNummer falls es zwei an einem Tag gibt) und die Artikelbezeichnung dazu. Unten in der Tabelle sieht man das es scheinbar die richtigen Werte liefert.

Jetzt schaffe ich es nicht den "äusseren" select so drumrum zu bauen das die Auswertung stimmt:
Innerer Select fett markiert: den äusseren schreib ich nicht fett dazu und ich habe auch nur den oberen Teil weil ich nicht verstehe wie ich den Rest joinen muss. In dem alten Thread (war eine andere Datenbank) habe ich es mit eurer Hilfe geschafft, da hatte ich aber nur einen Join! Der hier lässt mich echt schon verzweifeln.

select
t.MaxDatum,
t.MaxNummer,
t.PK_id,
t.such,
t.name,
PIT.preis,
PIT.pehe,
PIT.PE
FROM (
SELECT
max(PUR.vom) AS MaxDatum,
max(PUR.nummer) AS MaxNummer,
ART.PK_id,
ART.such,
ART.name
from Purchasing$Item_4_2 PIT (NOLOCK)
INNER JOIN Part$Product_2_1 ART (NOLOCK)
ON ART.PK_id = PIT.FK_art
INNER JOIN Purchasing$Purchasing_4_1 PUR (NOLOCK)
ON PUR.PK_id = PIT.FK_kopf
WHERE ART.MANDANT_ID = 3 AND PUR.MANDANT_ID =3 and PUR.vom > '2017-12-31 00:00:00.000' and PUR.ktyp = '(PurchaseOrder)'
GROUP BY ART.PK_id, ART.such,ART.name) t

upload_2019-4-9_12-10-23.png


Vielen Dank
Roland
 
Werbung:
SQL Abfrage letztes Datum für die die es noch nicht gelesen haben.

Ich blicke nicht mehr durch daher wäre meine Herangehensweise jetzt Testdaten. Du müsstest mir mal zu drei deiner Ergebniszeilen alle Datensätze (mit den relevanten Spalten) aus den Ausgangstabellen geben. Damit ich die selber nutzen kann bitte als Text, nicht Bild und natürlich mit Tabellen- und Spaltennamen. Gerne auch SQL Statements zum erstellen der Tabellen und Einfügen der Datensätze.
 
Hi Ukulele!
Danke für die Hilfe! Ich hab die Ergebnisse aus unserer Testdatenbank jetzt im Editor als Text gespeichert. Ich hoffe damit kannst du was anfangen.

Ich habe eigentlich drei Abfragen :

ART: Ich hab da jetzt nur die ArtikelId und den Suchnamen drin. Das sind quasi aus dem Artikelstamm wo ich mir den Suchnamen oder auch Namen des Artikels holen muss. MandantID = 3 weil es in der Tabelle auch werte für einen Testmandanten gibt!
select
ART.PK_id,
ART.such
from Part$Product_2_1 ART
where ART.MANDANT_ID = 3
order by ART.such

PUR: Das ist die Bestellung an sich (Bestellkopf), hier wieder die ID der Bestellung und die Bestellnummer und die LieferantenID hab ich da jetzt auch dazugenommen. PUR.ktyp = PurchaseOrder weil in dieser Tabelle z.b. auch Bestellanforderungen stehen. Brauche aber nur die Bestellungen!
select
PUR.PK_id,
PUR.nummer,
PUR.FK_lief
from Purchasing$Purchasing_4_1 PUR
where PUR.MANDANT_ID = 3 and PUR.ktyp = '(PurchaseOrder)'

PIT: Das sind die Positionen zu einer Bestellung wo die bestellten Artikel drin sind. FK_art ist die ArtikelID, FK_kopf ist die ID der Bestellung (Kopf)
select
PIT.FK_art,
PIT.FK_kopf,
PIT.preis,
PIT.pehe,
PIT.pe
from Purchasing$Item_4_2 PIT
where PIT.MANDANT_ID = 3

Ich hätte wie gesagt gerne den letzten Bestellpreis für einen Artikel, mit der Bestellnummer, und wenn möglich der LieferantenID.
Wenns zwei Bestellungen an einem Tag gibt dann die mit der höheren Bestellnummer.

Fürs erste wärs schon super die Werte aus ART zu bekommen WEIL
eigentlich gäbe es neben ART noch eine andere eigene Tabelle wo auch Zusatzartikel drin sind aber mit der wirds dann noch heftiger. D.h. in PIT die FK_art kann auch die ID von einem Zusatzartikel aus der ZUS sein
ZUS:
select
ZUS.PK_id,
ZUS.such
from Part$Supplementaryitem_2_4 ZUS
where ZUS.MANDANT_ID = 3

Ich werde auch noch weiter versuchen auf ein Ergebnis zu kommen.

Danke und lg
Roland
 

Anhänge

  • ART.txt
    343,7 KB · Aufrufe: 2
  • PIT.txt
    261,9 KB · Aufrufe: 0
  • PUR.txt
    582,1 KB · Aufrufe: 0
  • ZUS.txt
    188,1 KB · Aufrufe: 0
Werbung:
Zurück
Oben