AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Select mit SubSelect summieren
Thema durchsuchen
Ansicht
Themen-Optionen

Select mit SubSelect summieren

Ein Thema von uwewo · begonnen am 16. Apr 2007 · letzter Beitrag vom 20. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#1

Select mit SubSelect summieren

  Alt 16. Apr 2007, 07:59
Datenbank: MySQL • Version: 4.11 • Zugriff über: AnyDAC
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:
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
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?
Jeder Stücklistenartikel, kann natürlich in jedem Artikel aus der Produktionstabelle vorkommen.
Uwe
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 09:24
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
Gruß
Norman
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 09:38
Danke Norman,

so hatte ich es auch schon versucht, allerdings erhalte ich auf diese Weise immer nur den ersten Datensatz in der Stückliste.
Uwe
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 09:43
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
Gruß
Norman
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 09:52
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.
Uwe
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 10:02
Hi,

Zitat:
Das mit GRUOP wahr schon klar, ein summieren ohne GROUP ist sowieso nicht möglich.
Das ist - zumindest für MS SQL - nicht richtig.



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:
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
Damit bekommst du die ANZAHL der aus b passenden Zeile je Artikel...
Gruß
Norman
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 12:30
Halo Norman,

Danke nochmal für Deinen tatkräftigen Einsatz.

Nun zum Stand der Dinge

SQL-Code:
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
Count gibt bei der Anzahl immer 2 anstatt 1 zurück, dass wäre aber nicht schlimm denn
SUM(b.GutStueck) liefert die richtige Menge der produzierten Teile.

Allerdings wenn ich

(a.Menge * Sum(b.GutStueck)) as Gesamt berechne fehlen zwischen 3+5 Artikel aus der Stückliste.

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.
Uwe
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Select mit SubSelect summieren

  Alt 16. Apr 2007, 19:30
Hallo uwewo,

hier mal mein Vorschlag...
SQL-Code:
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
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?
Das zusätzliche Gruppieren sollte auch kein Problem sein. Aber ich werde aus deinen Angaben einfach nicht schlach, schade.

Gruss
Thorsten
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Select mit SubSelect summieren

  Alt 18. Apr 2007, 07:31
Zitat von omata:
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?
Ok, hier nocheinmal zum besseren Verständnis die sehr vereinfachte Tabellen Übersicht, und mein gewünschtes Ergebnis.

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.
Uwe
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Select mit SubSelect summieren

  Alt 18. Apr 2007, 22:10
Ok, so verstehe ich was du haben möchtest.

Hier mein Vorschlag...
SQL-Code:
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
Edit: ich habe das mit MySQL 5 getestet. Ob das auch schon mit 4.11 geht weiss ich nicht.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz