1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL Abfrage letzter Preis für Artikel

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von rolandg1881, 9 April 2019.

  1. rolandg1881

    rolandg1881 Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. rolandg1881

    rolandg1881 Benutzer

    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
      Dateigröße:
      343,7 KB
      Aufrufe:
      2
    • PIT.txt
      Dateigröße:
      261,9 KB
      Aufrufe:
      0
    • PUR.txt
      Dateigröße:
      582,1 KB
      Aufrufe:
      0
    • ZUS.txt
      Dateigröße:
      188,1 KB
      Aufrufe:
      0
  4. ukulele

    ukulele Datenbank-Guru

    Jo ich werd mir das am Wochenende mal rein knallen :)
     
  5. rolandg1881

    rolandg1881 Benutzer

    Voll cool! Danke!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden