Hallo
Ich habe folgende Aufgabenstellung die ich nicht lösen kann:
zwei Tabellen: siehe Bilder
(http://dataang.jpg)
(http://dataangp.jpg)
Tabelle: dataang
Tabelle: dataangp
¦ angnr ¦ | ¦ artnr ¦ | ¦ pep ¦ |
Ich sollte jetzt pro Artikelnummer (artnr) den Preis (pep) des letzen Auftrages herausfingen, jeweils aber nur einen! Die Verbindung kann über die Auftragsnummer (angnr) gemacht werden. in der dataangp kann die angnr mehrfach (pro Position des Auftrages) vorkommen.
Besten Dank für eure Hilfe
Gruss Dani |
|
Hätte die zweite Tabelle auch ein Datumsfeld, so ließe sich leicht das letzte Angebot zu einem Datum herausfinden - mit der gezeigten Datenform lässt sich das Problem IMHO nicht sauber lösen.
Hallo Lachtaube
Danke für die Antwort.
Leider hat es in der Tabelle dataangp kein Datum.
Gruss Dani
Zitat von: d.rodel am Juli 07, 2017, 15:46:10Leider hat es in der Tabelle dataangp kein Datum.
Darin sehe ich kein Problem. Die beiden Tabellen lassen sich doch in einer Abfrage über die
angnr problemlos miteinander verknüpfen.
Auf meiner Webseite habe ich übrigens einen ausführlichen Text zum Thema Abfrage/Darstellung 1:N-Daten (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=abfrage-1-zu-n-aggregatfunktion-letzter-datensatz) sogar mit einem Tutorial-Video (https://youtu.be/7ospEO8LCOw) dazu. Sogar das dort gewählte Beispiel ist der konkreten Frage hier recht nah.
@Phil,
und welcher pnp soll dann bei mehreren zur Verfügung stehender Preise zur Geltung kommen?
Hallo,
vermutlich meint der TS es "andersherum":
Zitatpro Artikelnummer (artnr) den Preis (pep) des letzten (jüngsten) Auftrages herausfinden
Zitat von: Lachtaube am Juli 07, 2017, 20:04:14@Phil,
und welcher pnp soll dann bei mehreren zur Verfügung stehender Preise zur Geltung kommen?
Jeweils nur einer! ;-)
Welcher genau, muss derjenige entscheiden, der die Anforderungen definiert hat.
Für mich wäre es das Naheliegendste mit
AVG() den Durchschnitt zu ermitteln, aber auch
MIN() oder
MAX() könnten fachlich Sinn machen, wenn es kein anderes Kriterium gibt, den "richtigen" Preis zu ermitteln.
Hallo
Danke für die Antworten.
Ich hab's mal nach der Anleitung versucht hat aber nicht ganz geklappt, ich habe immer noch pro Artikel mehrere Preise.
Hier die Abfrage die ich erstellt habe:
Select dataangp.artnr,dataangp.angnr, dataangp.pep, klb.datumanl
from dataangp
inner join dataang on dataangp.angnr = dataang.angnr
inner join (select dataang.*
from dataang
inner join
(select dataang.angnr, max(dataang.datumanl) as maxdatum
from dataang
group by dataang.angnr) as b
on dataang.angnr = b.angnr and dataang.datumanl = b.maxdatum) as klb
on dataangp.angnr = klb.angnr
inner join dataas on dataas.artnr = dataangp.artnr
where klb.datumanl > '01.01.2015' and dataas.chschl = 'F'
group by dataangp.angnr, dataangp.artnr, dataangp.pep, klb.datumanl
order by dataangp.artnr
und das Ergebnis:
(http://ergebnis.jpg)
Gruss Dani
Zitat von: d.rodel am Juli 10, 2017, 08:42:12Ich hab's mal nach der Anleitung versucht hat aber nicht ganz geklappt, ich habe immer noch pro Artikel mehrere Preise.
Grundsätzlich sieht das gut aus.
Du hast mit dem Sachverhalt der mehrfachen Preise pro Artikel und Angebot eine Situation, die sich ohne weitere Informationen nicht sauber lösen lässt.
Welche Preis soll den angezeigt werden, wenn es nur einer sein darf?
Mit den bisherigen Informationen bleibt nur die Möglichkeit mit Aggregatfunktionen entweder den niedrigsten (MIN), den höchsten (MAX) oder den Durchschnittspreis (AVG) pro Angebot zu ermitteln.
Hier für AVG:
Select dataangp.artnr,dataangp.angnr, AVG(dataangp.pep) AS Durchschnittspreis, klb.datumanl
...
Die Spalte
dataangp.pep lässt du dann aus dem GROUP BY raus.
Hallo
Danke vielmals, hab's mit leichten Aenderungen so hingekriegt dass ich es verwenden kann.
Hier der definitive Code:
Select dataangp.artnr, (max(dataangp.pep*datawae.ufaktor*((100-dataas.umrechf)/100)* (100-dataangp.rab1)/100)) as maxpreis
from dataangp
inner join dataang on dataangp.angnr = dataang.angnr
inner join (select dataang.*
from dataang
inner join
(select dataang.angnr, max(dataang.datumanl) as maxdatum
from dataang
group by dataang.angnr) as b
on dataang.angnr = b.angnr and dataang.datumanl = b.maxdatum
where dataang.aufkenn = 1) as klb
on dataangp.angnr = klb.angnr
inner join dataas on dataas.artnr = dataangp.artnr
inner join dataaszus on dataaszus.artnr = dataas.artnr
inner join datawae on dataang.waenr = datawae.waenr
where klb.datumanl > '01.01.2015' and (dataas.chschl = 'F' or
dataaszus.beistellzeit > 0)
group by dataangp.artnr
order by dataangp.artnr
Besten Dank.
Gruss Dani