<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>SQL-Frage für Fortgeschrittene</title>
    <link>http://forum.geizhals.at/feed.jsp?id=899782</link>
    <description>Geizhals-Forum</description>
    <item>
      <title>Re: SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8013584.html#8013584</link>
      <description>Spannendes Beispiel, falls die Frage noch aktuell ist, hier meine Lösung:&lt;br&gt;&lt;br&gt;with cheapest_supplier_overall as&lt;br&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp; select x.artnr, x.lieferantennr, x.menge_ab, x.einkaufspreis&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from (&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select p.*, row_number() over (partition by artnr order by einkaufspreis) rang&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from preislisten p&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;) x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where x.rang = 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;),&lt;br&gt;cheapest_supplier_for_order as&lt;br&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp; select x.artnr, x.datum, x.menge, x.lieferantennr, x.menge_ab, x.einkaufspreis&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from (&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select b.artnr, b.datum, b.menge, p.lieferantennr, p.menge_ab, p.einkaufspreis, row_number() over (partition by b.artnr order by p.einkaufspreis) rang&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from bestellungen b&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; join preislisten p&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.artnr = b.artnr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and p.menge_ab &amp;lt;= b.menge&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;) x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where x.rang = 1 &lt;br&gt;)&lt;br&gt;select a.artnr, a.datum, a.menge, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.lieferantennr lieferant1, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.menge_ab lieferant1_ab_menge, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.einkaufspreis lieferant_1_einkaufspreis, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.lieferantennr lieferant2,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.menge_ab lieferant2_ab_menge,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.einkaufspreis lieferant2_einkaufspreis&lt;br&gt;&amp;nbsp;&amp;nbsp;from cheapest_supplier_for_order a&lt;br&gt;&amp;nbsp;&amp;nbsp;join cheapest_supplier_overall b&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;on (b.artnr = a.artnr);&lt;br&gt;&lt;br&gt;btw: Für Oracle SQL Fragen in Foren eignet sich livesql.oracle.com wunderbar. &lt;br&gt;&lt;a href="https://livesql.oracle.com/apex/livesql/s/j02wllnvr8w3fyrf1jdso7fd4" rel="noopener" target="_blank"&gt;https:/&lt;wbr/&gt;/&lt;wbr/&gt;livesql.oracle.com/&lt;wbr/&gt;apex/&lt;wbr/&gt;livesql/&lt;wbr/&gt;s/&lt;wbr/&gt;j02wllnvr8w3fyrf1jdso7fd4&lt;/a&gt; &lt;br/&gt;</description>
      <pubDate>Fri, 01 May 2020 14:57:30 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8013584.html#8013584</guid>
      <dc:creator>repugnant</dc:creator>
      <dc:date>2020-05-01T14:57:30Z</dc:date>
    </item>
    <item>
      <title>Re(4): SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8005800.html#8005800</link>
      <description>wie jo und?&lt;br&gt;&lt;br&gt;du schreibst:&lt;br&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br&gt;Man multipliziert für jeden Lieferanten die verschiedenen Anzahl der Mengen und den damit verbundenen Preis und bekommt dann den Preis pro Stück und sortiert sie nicht nach einkaufspreis, sondern nach dem errechneten Stückpreis (row_number over....)&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Für den Stückpreis musst du gar nix multiplizieren oder errechnen, er ist als Spalte in der vom OP angegebenen Tabelle enthalten.&lt;br/&gt;</description>
      <pubDate>Tue, 10 Mar 2020 14:14:46 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8005800.html#8005800</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2020-03-10T14:14:46Z</dc:date>
    </item>
    <item>
      <title>Re(3): SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8005773.html#8005773</link>
      <description>Jo und? Grundsätzlich geht es ja darum, den Preis pro Stück für jeden Händler für jede Mengenaktion auszurechnen, sonst macht das ja gar keinen Sinn.&lt;br&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Tue, 10 Mar 2020 13:32:56 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8005773.html#8005773</guid>
      <dc:creator>Infosauger</dc:creator>
      <dc:date>2020-03-10T13:32:56Z</dc:date>
    </item>
    <item>
      <title>Re(2): SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8005060.html#8005060</link>
      <description>Äh laut der Angabe ist das der Stückpreis, sonst würds wenig Sinn machen&lt;br/&gt;</description>
      <pubDate>Wed, 04 Mar 2020 20:01:10 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8005060.html#8005060</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2020-03-04T20:01:10Z</dc:date>
    </item>
    <item>
      <title>Re: SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8005026.html#8005026</link>
      <description>Hallo&lt;br&gt;&lt;br&gt;ich habe mir jetzt nicht genau das SQL überlegt, aber mit einer WITH-Klausel könnte das übersichtlich gestaltet werden in folgendem Sinne:&lt;br&gt;&lt;br&gt;1. Schritt: Man multipliziert für jeden Lieferanten die verschiedenen Anzahl der Mengen und den damit verbundenen Preis und bekommt dann den Preis pro Stück und sortiert sie nicht nach einkaufspreis, sondern nach dem errechneten Stückpreis (row_number over....)&lt;br&gt;&lt;br&gt;Danach such man sich einfach für jeden Artikel den jeweils ersten Satz.&lt;br&gt;&lt;br&gt;Habe ich da was vergessen?&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Wed, 04 Mar 2020 14:33:59 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8005026.html#8005026</guid>
      <dc:creator>Infosauger</dc:creator>
      <dc:date>2020-03-04T14:33:59Z</dc:date>
    </item>
    <item>
      <title>Re: SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8004569.html#8004569</link>
      <description>Wo ist SirHondo, wenn ma ihn braucht..!?&lt;br&gt;&lt;br&gt;&lt;br&gt;Verzeih, kann Dir auch nicht weiterhelfen, lese aber interessiert mit.&lt;br&gt;&lt;br&gt;&lt;br&gt;Gesegnetes Wochenende,&lt;br&gt;j.&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Sat, 29 Feb 2020 19:13:59 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8004569.html#8004569</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2020-02-29T19:13:59Z</dc:date>
    </item>
    <item>
      <title>Re(2): SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8004488.html#8004488</link>
      <description>&lt;blockquote&gt;&lt;em&gt; Also das ist ja vom Ansatz her Käse. Irgendwann ist es auch einfach nicht mehr&lt;br&gt;sinnvoll, alles in ein Query quetschen zu wollen.&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;This. Man muss nicht immer alles in einen einzelnen Query stopfen. Oft joint man dadurch unnötig groß rum. &lt;br/&gt;</description>
      <pubDate>Fri, 28 Feb 2020 20:02:56 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8004488.html#8004488</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2020-02-28T20:02:56Z</dc:date>
    </item>
    <item>
      <title>Re: SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8004431.html#8004431</link>
      <description>Ich hab kein Oracle. Mal in Sqlite3 daran versucht. Keine Garantie auf Richtigkeit. Ich mache nur selten was mit SQL. Vielleicht ist auch ganz falsch. &lt;img src="teeth.gif" width="16" height="19" align="absmiddle" alt="|-D"/&gt;&lt;br&gt;&lt;br&gt;Einzelabfrage&lt;br&gt;&lt;br&gt;Query:&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;br&gt;SELECT MAX(menge_ab*einkaufspreis, 25*einkaufspreis) AS bestellpreis, *&lt;br&gt;FROM preislisten&lt;br&gt;WHERE artikelnr=1&lt;br&gt;ORDER BY bestellpreis ASC&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;Result:&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;br&gt;bestellpreis|artikelnr|datumvon|lieferantennr|menge_ab|einkaufspreis&lt;br&gt;22.5|1|01.01.2019|L2|20|0.9&lt;br&gt;25.0|1|01.01.2019|L1|10|1.0&lt;br&gt;80.0|1|01.01.2019|L1|100|0.8&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;Multiabfrage aus der Tabelle "Bestellungen" (nur ein Ergebnis pro Bestellung, hab ein paar mehr Bestellungen dazuerfunden)&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;br&gt;SELECT MIN(MAX(pl.menge_ab*pl.einkaufspreis, b.menge*pl.einkaufspreis)) as bestellpreis, *&lt;br&gt;FROM bestellungen b LEFT JOIN preislisten pl ON b.artikelnr=pl.artikelnr&lt;br&gt;GROUP BY b.rowid&lt;br&gt;ORDER BY bestellpreis ASC;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;Result:&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;br&gt;bestellpreis|artikelnr|datum|menge|artikelnr|datumvon|lieferantennr|menge_ab|einkaufspreis&lt;br&gt;10.0|1|05.02.2020|10|1|01.01.2019|L1|10|1.0&lt;br&gt;18.0|1|01.02.2020|20|1|01.01.2019|L2|20|0.9&lt;br&gt;22.5|1|02.02.2020|25|1|01.01.2019|L2|20|0.9&lt;br&gt;80.0|1|03.02.2020|100|1|01.01.2019|L1|100|0.8&lt;br&gt;640.0|1|04.02.2020|800|1|01.01.2019|L1|100|0.8&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br&gt;Es soll eine Liste ausgegeben werden, die zu jeder Bestellung den günstigsten Lieferanten unter Berücksichtung der Bestellmenge und jenen Lieferanten der der günstigste wäre wenn man mindestens x Stück bestellt.&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Das wird ja noch verquerter. Ich hab es nur hinbekommen wenn es immer einen Lieferanten gibt, der die geforderte Stückzahl überbietet und den Stückpreis unterbietet, also ggf. per Dummy-Eintrag dies garantiert wird. &lt;br&gt;&lt;br&gt;Ansonsten fallen Einträge ganz heraus wenn du das nächst-höhere Stückzahlangebot bzw. nächst-niedrigere Stückpreisangebot suchst und keins da ist. Also das ist ja vom Ansatz her Käse. Irgendwann ist es auch einfach nicht mehr sinnvoll, alles in ein Query quetschen zu wollen.&lt;br&gt;&lt;br&gt;Und ein halbes Jahr später versteht das Query auch keiner mehr.&lt;br&gt;&lt;br&gt;Aber vielleicht gehts ja auch viel eleganter.&lt;br/&gt;</description>
      <pubDate>Fri, 28 Feb 2020 11:32:08 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8004431.html#8004431</guid>
      <dc:creator>frostschutz</dc:creator>
      <dc:date>2020-02-28T11:32:08Z</dc:date>
    </item>
    <item>
      <title>SQL-Frage für Fortgeschrittene</title>
      <link>http://forum.geizhals.at/t899782,8004330.html#8004330</link>
      <description>Hi,&lt;br&gt;&lt;br&gt;ich beiße mir gerade an dieser SQL Abfrage (ORACLE 11) die Zähne aus.&lt;br&gt;Hat wer einen Tipp für mich?&lt;br&gt;&lt;br&gt;Es soll eine Liste ausgegeben werden, die zu jeder Bestellung den günstigsten Lieferanten unter Berücksichtung der Bestellmenge und jenen Lieferanten der der günstigste wäre wenn man mindestens x Stück bestellt.&lt;br&gt;&lt;br&gt;&lt;br&gt;BESTELLUNGEN&lt;br&gt;artikelnr,datum, menge&lt;br&gt;1, 01.02.2020, 20&lt;br&gt;..&lt;br&gt;------------------------&lt;br&gt;PREISLISTEN&lt;br&gt;artikelnr, datumvon, lieferantennr, menge_ab, einkaufspreis&lt;br&gt;1, 01.01.2019, L1, 10, 1.0&lt;br&gt;1, 01.01.2019, L1, 100, 0.8&lt;br&gt;1, 01.08.2019, L2, 20, 0.9&lt;br&gt;..&lt;br&gt;-------------------------&lt;br&gt;&lt;br&gt;SOLL-ERGEBNIS&lt;br&gt;artikelnr, datum, menge, lieferant1, lieferant1_ab_menge, lieferant1_preis, lieferant2_preis, lieferant2_ab_menge, lieferant2_preis,&lt;br&gt;1, 01.02.2020, 25, L2, 20, 0.9,&amp;nbsp;&amp;nbsp;L1, 100, 0.8&lt;br&gt;&lt;br&gt;Also Lieferant L2 ist im Bsp. der günstigste, wenn man 25 Stück bestellt, Lieferant L1 wäre der günstigste, wenn man mindestens 100 Stück bestellt.&lt;br&gt;&lt;br&gt;&lt;br&gt;Ich hab es mit allen möglichen Sub-Selects probiert, mit row_number() over (order by einkaufspreis) usw.&lt;br&gt;&lt;br&gt;SELECT artikelnr, datum, menge, p1.lieferantennr, p1.einkaufspreis, p2.lieferantennr, p2.einkaufspreis&lt;br&gt;FROM&lt;br&gt;BESTELLUNGEN,&lt;br&gt;(SELECT * FROM PREISLISTEN WHERE ...) p1,&lt;br&gt;(SELECT * FROM PREISLISTEN WHERE ...) p2&lt;br&gt;WHERE&lt;br&gt;..&lt;br/&gt;</description>
      <pubDate>Thu, 27 Feb 2020 15:22:09 GMT</pubDate>
      <guid>http://forum.geizhals.at/t899782,8004330.html#8004330</guid>
      <dc:creator>wasikonier</dc:creator>
      <dc:date>2020-02-27T15:22:09Z</dc:date>
    </item>
  </channel>
</rss>
