![]() |
Datenbank: MySQL • Version: 4.11 • Zugriff über: AnyDAC
Select mit SubSelect summieren
Gutem Morgen,
mit folgender Abfrage, erhalte ich die Menge aller Stücklisten-Artikel die im Jahr 2007 für den Artikel 4030.012 verwendet wurden.
SQL-Code:
Nun meine Frage, sieht hier jemand eine Möglichkeit das ganze so zu erweitern, dass ich für alle Artikel aus der Produktionstabelle die Mengen erhalte, und diese auch summiert werden. Oder komme ich um eine zusätzliche Abfrage nicht herum?
SELECT a.ArtNr,a.ArtBez, a.Menge *
( SELECT SUM(b.GutStueck) FROM OEE_Produktion AS b WHERE a.ArtNr = b.ArtNr AND Year(b.Datum) = 2007 ) AS Menge, a.MengenEinheit FROM OEE_StckList AS a WHERE a.ArtNr = '4030.012' ORDER BY a.ArtNr Jeder Stücklistenartikel, kann natürlich in jedem Artikel aus der Produktionstabelle vorkommen. |
Re: Select mit SubSelect summieren
Hi,
ich kenn MySQL selbst nicht, aber evtl. geht es so:
SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, SUM(b.GutStueck) AS MENGE
FROM OEE_StckList AS a JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr WHERE Year(b.Datum) = 2007 ORDER BY a.ArtNr |
Re: Select mit SubSelect summieren
Danke Norman,
so hatte ich es auch schon versucht, allerdings erhalte ich auf diese Weise immer nur den ersten Datensatz in der Stückliste. :cry: |
Re: Select mit SubSelect summieren
Hi,
sorry, das GROUP BY fehlt natürlich
SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, SUM(b.GutStueck) AS MENGE
FROM OEE_StckList AS a JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr WHERE Year(b.Datum) = 2007 GROUP BY a.ArtNr, a.ArtBez, a.Menge ORDER BY a.ArtNr |
Re: Select mit SubSelect summieren
Das mit GRUOP wahr schon klar, ein summieren ohne GROUP ist sowieso nicht möglich.
Leider aber wie gesagt immer nur der erste Datensatz, der Stückliste. |
Re: Select mit SubSelect summieren
Hi,
Zitat:
Mit der Abfrage oben erhält man alle Zeilen aus Tabelle a, für die es mindestens eine entsprechende Zeile aus Tabelle b gibt, für die gilt: a.ArtNr=B.ArtNr und (B.Datum) in 2007. Bist du sicher, das in Tabelle b mehr Daten liegen, als ausgegeben werden? Versuchs doch mal mit
SQL-Code:
Damit bekommst du die ANZAHL der aus b passenden Zeile je Artikel...
SELECT a.ArtNr,a.ArtBez, a.Menge, Count(b.*) as ANZAHL
FROM OEE_StckList AS a LEFT JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr and Year(b.Datum) = 2007 GROUP BY a.ArtNr, a.ArtBez, a.Menge ORDER BY a.ArtNr |
Re: Select mit SubSelect summieren
Halo Norman,
Danke nochmal für Deinen tatkräftigen Einsatz. Nun zum Stand der Dinge
SQL-Code:
Count gibt bei der Anzahl immer 2 anstatt 1 zurück, dass wäre aber nicht schlimm denn
SELECT a.ArtNr,a.ArtBez, a.Menge, Count(b.ArtNr) as ANZAHL, Sum(b.GutStueck) as Menge
FROM OEE_StckList AS a LEFT JOIN OEE_Produktion AS b ON a.ArtNr = b.ArtNr and Year(b.Datum) = 2007 GROUP BY a.ArtNr, a.ArtBez, a.Menge ORDER BY a.ArtNr SUM(b.GutStueck) liefert die richtige Menge der produzierten Teile. Allerdings wenn ich
SQL-Code:
berechne fehlen zwischen 3+5 Artikel aus der Stückliste.
(a.Menge * Sum(b.GutStueck)) as Gesamt
Das weitere und wahrscheinlich auch grössere Problem ist, dass ich die jetzt gruppierten Artikel nocheinmal gruppieren müsste damit die Artikel aus der Stückliste auch summiert werden. Ich denke mal ich werde wohl nicht um eine weitere Abfrage, oder Temp Table herum kommen. :? |
Re: Select mit SubSelect summieren
Hallo uwewo,
hier mal mein Vorschlag...
SQL-Code:
Ich würde dir auch gern konkreter helfen, aber ich muss zugeben, dass ich aus deinen Informationen einfach nicht schlau werden. Was steht wie in deinen Tabellen und was möchtest du konkret haben?
SELECT p.ArtNr, s.ArtBez, s.Menge, s.MengenEinheit, s.stueck
FROM OEE_Produktion p LEFT JOIN (SELECT ArtNr, SUM(b.GutStueck) stueck FROM OEE_StckList GROUP BY ArtNr) s ON p.ArtNr = s.ArtNr WHERE p.ArtNr = '4030.012' AND YEAR(p.datum) = 2007 ORDER BY p.ArtNr Das zusätzliche Gruppieren sollte auch kein Problem sein. Aber ich werde aus deinen Angaben einfach nicht schlach, schade. Gruss Thorsten |
Re: Select mit SubSelect summieren
Zitat:
Tabelle -> Produktion ArtikelNr_Produkt, ArtikelBez_Produkt, Produzierte_Menge Tabelle -> Stückliste ArtikelNr_Produkt, ArtikelNr_Einzelteil, Menge_Einzeilteil Jedes Produkt besteht aus einer Stückliste, die wiederum die Einzelteile eines Produkts enthält. Die Tabelle Produktion enthält die Menge(in Stck) aller Produkte die produziertz wurden. Die Stücklistentabelle besteht aus allen Einzelteilen die zu einem Produkt gehören, Mengenangabe(Stück, kg) etc. z.B. ProduktionTabelle ArtikelNr_Produkt | ArtikelBez_Produkt | Produzierte_Menge 4030.012 | Test | 1200 6070.016 | Test2 | 600 4030.012 | Test | 200 produzierte Menge des Produkt 4030.012 = 1400 produzierte Menge des Produkt 6070.016 = 600 StücklistenTabelle ArtikelNr_Produkt | ArtikelNr_Einzelteil | Menge_Einzeilteil 4030.012 | 1000 | 0.5 4030.012 | 1001 | 0.5 4030.012 | 1002 | 1 6070.016 | 1000 | 1 somit besteht Produkt 4030.012 aus 3 Einzelteilen und zwar 1000, 1001, 1002 nun möchte ich die Gesamtmenge aller Einzelteile berechnen. Das wäre in diesem Fall: für Produkt 4030.012 und Einzelteil-Nr. 1000 | 1400 Stück * 0.5 = 700 für Produkt 6070.016 und Einzelteil-Nr. 1000 | 600 Stück * 1 = 600 Gesamtmenge für Einzelteil-Nr. 1000 = 1300 Also wie gesagt ich möchte die Summe aller Einzelteile, von den Summen aller Produkte. Wobei jedes Produkt teilweise aus unterschiedlichen Einzelteilen bestehen kann. |
Re: Select mit SubSelect summieren
Ok, so verstehe ich was du haben möchtest.
Hier mein Vorschlag...
SQL-Code:
Edit: ich habe das mit MySQL 5 getestet. Ob das auch schon mit 4.11 geht weiss ich nicht.
SELECT teilnr, SUM(multiplikant) summe
FROM (SELECT teilnr, x.menge * y.menge AS multiplikant FROM (SELECT artnr, SUM(menge) menge FROM oee_produktion GROUP BY artnr) x INNER JOIN oee_stcklist y ON x.artnr = y.artnr) x GROUP BY teilnr Gruss Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz