Problem mit SQL Join

  • #1
W

wibni

Bekanntes Mitglied
Themenersteller
Dabei seit
15.04.2005
Beiträge
71
Reaktionspunkte
0
Hallo,

ich komme bei folgenden Join nicht weiter. Die einzige richtige Abfrage ist das Resultat von INactual. Alle anderen summierten Werte, also COactual, CObudget und INbudget sind ein vielfaches des Wertes was sie eigentlich sein sollten. Es scheint also so, als wird die Summe der anderen Spalten nicht nur einmal berechnet, sondern mehrfach. Wie kann ich denn des Select noch abändern? Will einfach nur die Werte aus 3 versschiedenen Tabellen....

SELECT vmdh.txtype, vmdh.txdesc,vmdh.nmblabrdur, vmdbhd.nmblabrdur,

SUM(vmdh.mnblabrcst+vmdh.mnbsubccst+vmdh.mnbitemcst+vmdh.mnbservcst+vmdh.mnboverhd) AS COactual,
SUM(vmdbhd.mnblabrcst+vmdbhd.mnbsubccst+vmdbhd.mnbitemcst+vmdbhd.mnbservcst+vmdbhd.mnboverhd) AS CObudget,
SUM(vmdtsv.mncompricf) AS INactual,
SUM(vmdbhd.mnblabramt+vmdbhd.mnbsubcamt+vmdbhd.mnbitemamt+vmdbhd.mnbservamt)*vmdh.nmcurrrate AS INbudget

FROM VMDBHD
Inner JOIN VMDH ON VMDBHD.nmdocid=VMDH.nmdocid
Inner JOIN VMDTSV ON VMDBHD.nmdocid=VMDTSV.nmdocid

WHERE vmdh.txtype =->C04026'
GROUP BY vmdh.txtype, vmdh.txdesc, vmdh.nmblabrdur, vmdbhd.nmblabrdur, vmdh.nmcurrrate
 
  • #2
Im Grunde will ich nur diese 2 Selects verbinden:

SELECT SUM(vmdtsv.mncompricf)
FROM VMDTSV Inner join vmdh ON VMDH.nmdocid=vmdtsv.nmdocid
WHERE vmdh.txtype =->C04026'


SELECT vmdh.txtype, vmdh.txdesc,vmdh.nmblabrdur, vmdbhd.nmblabrdur,
SUM(vmdh.mnblabrcst+vmdh.mnbsubccst+vmdh.mnbitemcst+vmdh.mnbservcst+vmdh.mnboverhd) AS COactual,
SUM(vmdbhd.mnblabrcst+vmdbhd.mnbsubccst+vmdbhd.mnbitemcst+vmdbhd.mnbservcst+vmdbhd.mnboverhd) AS CObudget,
SUM(vmdbhd.mnblabramt+vmdbhd.mnbsubcamt+vmdbhd.mnbitemamt+vmdbhd.mnbservamt)*vmdh.nmcurrrate AS INbudget
FROM VMDBHD
Inner JOIN VMDH ON VMDBHD.nmdocid=VMDH.nmdocid

WHERE vmdh.txtype =->C04026'
GROUP BY vmdh.txtype, vmdh.txdesc, vmdh.nmblabrdur, vmdbhd.nmblabrdur, vmdh.nmcurrrate
 
  • #3
Hi

Wenn du die Group bys und Sums weglässt, wieviele Datensätze kriegst du jeweils bei den 3 Abfragen?

Gruß, Michael
 
  • #4
VMDH -> 1 Wert
VMDBHD -> 1 Wert
VMDTSV -> 37 Werte

Wenn ich alle Werte aus den ersten beiden Tabellen durch 37 teile habe ich den richtigen Wert.
Aber wie bastel ich nun mein Select zusammen? Es muss doch möglich sein da ein Select bauen zu können?
 
  • #5
Hi

Ich glaube das sauberste wären dann ein Subselect für die VMDTSV Summe, oder du probierst sum() / count(VMDTSV.nmdocid) zu teilen. Glaube aber nicht dass es funktioniert.

Gruß, Michael
 
  • #6
Ok. Habs jetzt so gemacht und es scheint zu funktionieren.
Bin zufällig auch darauf gestossen dass es mit nen Right Join wesentlich schneller funktioniert als mit nen Inner Join. Warumm auch immer....

SELECT vmdh.txtype, vmdh.txdesc,vmdh.nmblabrdur, vmdbhd.nmblabrdur,
SUM(DISTINCT (vmdh.mnblabrcst+vmdh.mnbsubccst+vmdh.mnbitemcst+vmdh.mnbservcst+vmdh.mnboverhd)) AS COactual,
SUM(DISTINCT (vmdbhd.mnblabrcst+vmdbhd.mnbsubccst+vmdbhd.mnbitemcst+vmdbhd.mnbservcst+vmdbhd.mnboverhd)) AS CObudget,
SUM(vmdtsv.mncompricf) AS INactual,
SUM(DISTINCT (vmdbhd.mnblabramt+vmdbhd.mnbsubcamt+vmdbhd.mnbitemamt+vmdbhd.mnbservamt))*vmdh.nmcurrrate AS INbudget
FROM VMDBHD RIGHT JOIN (VMDH INNER JOIN VMDTSV ON VMDTSV.nmdocid=VMDH.nmdocid) ON VMDBHD.nmdocid=VMDTSV.nmdocid
WHERE vmdh.txtype ='C04026'
GROUP BY vmdh.txtype, vmdh.txdesc, vmdh.nmblabrdur, vmdbhd.nmblabrdur, vmdh.nmcurrrate


Thanks...
 
Thema:

Problem mit SQL Join

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben