Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Inner Join und Summen Problem

Frage Entwicklung Datenbanken

Mitglied: Budda

Budda (Level 1) - Jetzt verbinden

06.08.2009, aktualisiert 09:19 Uhr, 4707 Aufrufe, 12 Kommentare

Hallo,

ich hab folgendes Problem. Ich habe eine Tabelle mit Belegkopfdaten in der sich unter anderem der Gesamtbetrag des Beleges befindet. Diese verbinde ich mit den Belegzeilen per Inner join.
Hat natürlich zur Folge das ich die Belegkopfdaten genau so oft habe wie es Treffer in den Belegzeilen gibt und somit eine Summe über den Gesamtbetrag ein viel zu hohes Ergebnis liefert.

Gibt es eine Möglichkeit den Gesamtbetrag nur beim ersten Ergebnis einzutragen und bei allen weiteren nicht? So das ich wieder vernünftig eine Summe bilden kann. Oder vielleicht eine ganz andere Lösung?

Statement sieht vereinfacht derzeit so aus:

Select * FROM Belegkopf K INNER JOIN Belegzeilen Z ON K.id = Z.parentid


Gruß
Tobi
Mitglied: lobotomie
06.08.2009 um 09:23 Uhr
Da stellt sich die Frage welche Daten Du aus den Belegzeilen benötigst.

Loco Lobo
Bitte warten ..
Mitglied: NanaBama
06.08.2009 um 09:35 Uhr
Hi Tobi,

wenn Du die Belegkopfdaten mit einem GroupBy zusammenfasst und den Gesamtbetrag summierst erhälst Du jeweils nur ein Ergebnis.
Ich weiß nicht ob Du Dir das so vorstellt, aber eine Möglichkeit ist es.

Grüße, Nana
Bitte warten ..
Mitglied: Budda
06.08.2009 um 09:42 Uhr
Wir brauchen die Artikelnummern, Menge, etc. aus den Belegzeilen.

Momentan sieht das ja so aus:

Belegnr, Gesamtbetrag, Artikel, Menge
12345, 500,00, Kartoffel, 20
12345, 500,00, Möhre, 10
12345, 500,00, Apfel, 15

Und so bräuchte ich das:

Belegnr, Gesamtbetrag, Artikel, Menge
12345, 500,00, Kartoffel, 20
12345, 0, Möhre, 10
12345, 0, Apfel, 15

GroupBy wird mir da glaub ich nicht helfen.

Gruß
Tobi
Bitte warten ..
Mitglied: AndreasHoster
06.08.2009 um 09:44 Uhr
Gibt es eine Möglichkeit den Gesamtbetrag nur beim ersten Ergebnis einzutragen und bei allen weiteren nicht?
Nein.

In der einzelnen Belegzeile steht doch der Betrag dieser Belegzeile drin, oder? Dann addiere doch einfach die zusammen. Wenn Du da alle Belegzeilen mitnimmst, sollte das dem gesamtbetrag entsprechen. Und da jede Belegzeile nur einmal auftaucht, gibts auch keine Probleme mit den Summen.
Alternativ: Die Summe in einer eigenen Abfrage ausrechen.
Alternativ: Anzahl Belegzeilen ermitteln und den Gesamtbetrag jeweils durch die Anzahl Belegzeilen teilen und dann aufsummieren.
Gibt sicherlich noch weitere Varianten wenn man etwas Kreativität hat.
Bitte warten ..
Mitglied: AndreasHoster
06.08.2009 um 09:47 Uhr
So wirst Du es NIE bekommen. Nicht mit Select Anweisungen.
Bei Select ist jede Zeile gleichberechtigt, es gibt beim Join keine erste oder zweite Zeile, die man dann anders behandeln könnte.
Bitte warten ..
Mitglied: Budda
06.08.2009 um 10:21 Uhr
Hm ok, das mit dem Belegzeilen ermitteln wäre nen Weg. Beträge pro Belegzeile hab ich leider nicht.
Hab das mal versucht einzubauen, aber irgendwie will das nicht:

Select K.Belegnr, K.Gesamtbetrag, Z.Artikel, Z.Menge, Gesamtbetrag / Count(K.Belegnr) AS Summe FROM Belegkopf K INNER JOIN Belegzeilen Z ON K.id = Z.parentid

Der Plan war es eine zusätzliche Spalte anzufügen um die dann im Excel Summieren zu können. Aber so gehts nicht ^^
Bitte warten ..
Mitglied: db-wizard
06.08.2009 um 10:33 Uhr
Hallo,


hast du es schon mal mit UNION versucht ? Btw, welche Datenbank verwendest du ?


Gruss
Bitte warten ..
Mitglied: Budda
06.08.2009 um 10:50 Uhr
SQL Server2005

UNION? Ich versteh nicht worauf du hinaus willst. Mit Union Füge ich doch 2 Tabellen zusammen mit den gleichen Spalten. Was ja hier nicht gegeben ist.
Bitte warten ..
Mitglied: AndreasHoster
06.08.2009 um 11:21 Uhr
Natürlich will das nicht. Aggregatfunktionen können nicht einfach so mit normaler Ausgabe kombiniert werden.

Aber probiers mal mit einer Unterabfrage:
Select K.Belegnr, K.Gesamtbetrag, Z.Artikel, Z.Menge, Gesamtbetrag / t.Anzahl AS Summe FROM Belegkopf K, (Select Belegnr, count(Belegnr) from Belegkopf) as t INNER JOIN Belegzeilen Z ON K.id = Z.parentid, K.BELEGNR = t.BELEGNR
Bitte warten ..
Mitglied: db-wizard
06.08.2009 um 11:22 Uhr
Du selektierst zuerst dein kopf, fügst per UNION deine Belegzeilen dazu....

In ORACLE würde sich noch folgende Möglichkeit ergeben :

SELECT belegnr, SUM (preis*menge) OVER (PARTITION BY belegnr) AS Gesamtpreis, artikel ,menge
FROM(
SELECT a.belegnr, 0 AS gesamtbetrag, a.artikel, a.preis , menge
FROM belegzeilen a)

(Dies rechnet den Gesamtpreis halt jeweils aus den Bestellpositionen )

-->

BELEGNR GESAMTPREIS ARTIKEL MENGE
----------- ---------- -----
100 44 Kartoffeln 2
100 44 Käse 5
200 108 Kartoffeln 8
200 108 Fleisch 9
300 4 Messer 1


Gruss

(Gibt es in diesem Forum eigentllich auch eine Möglichkeit, Code zu formatieren ???)
Bitte warten ..
Mitglied: Budda
06.08.2009 um 12:49 Uhr
Alles klar, habs hinbekommen. Danke für eure hilfe
Bitte warten ..
Mitglied: db-wizard
06.08.2009 um 12:52 Uhr
...und wie hast du es hinbekommen ?


gruss
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Inner join über 3 Tabellen
Frage von Fitzel69Datenbanken10 Kommentare

Hallo zusammen, ich habe folgendes Problem: Ich muß aus unserem ERP System mehrere Infos heraus ziehen. Hierfür benötige ich ...

Datenbanken
MySQL - Join
Frage von ThoomaasDatenbanken4 Kommentare

Hallo alle zusammen! Ich habe zwei Tabellen in meiner Datenbank. Die eine beinhaltet Teams und einen Code zum Team ...

Router & Routing
Externe IP von innen erreichbar machen
gelöst Frage von Windows10GegnerRouter & Routing28 Kommentare

Hallo, ich habe bei mir nen kleinen FTP eingerichtet und möchte diesen auch intern von der Adresse von ddns.net ...

Festplatten, SSD, Raid
Veränderung MD5 Summe ( nach recovery)
gelöst Frage von RobpapaFestplatten, SSD, Raid8 Kommentare

Hallo, wir haben eine Fileserver mit ca. 75 TByte unter RAID 6. Als OS läuft Windows Server 2012. Wir ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 23 StundenBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Windows Store Apps
gelöst Frage von PeterleBWindows Server10 Kommentare

Gibt es einen Weg, auf Windows Server 2016 Windows Store Apps wie zum Beispiel die HP Smart App zu ...

Microsoft
Erfahrungen mit Webcam over RDP gesucht
Frage von DerWoWussteMicrosoft10 Kommentare

Moin Kollegen. Bekanntlich kann man Webcams nur mit Drittanbietersoftware in RDP reinschleifen. Was nutzt Ihr dazu? Wie stabil funktioniert ...