Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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, 4701 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
gelöst SQL Multiple Join auf selbe ID (3)

Frage von Memo66 zum Thema Datenbanken ...

Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

Datenbanken
SQL - Mehrere Tabellen über JOINS verketten (1)

Frage von Gwahlers zum Thema Datenbanken ...

Hyper-V
Hyper-V Host Domain Join (4)

Frage von Sunny89 zum Thema Hyper-V ...

Neue Wissensbeiträge
Windows Installation

Unorthodoxer Weg, um an einen Offline-Installer für Adobe Flash zu kommen

(8)

Tipp von beidermachtvongreyscull zum Thema Windows Installation ...

Datenschutz

Gefährdeter Datenschutz: Firefox löscht lokale Datenbanken nicht

(1)

Information von BassFishFox zum Thema Datenschutz ...

Firewall

PfSense OpenVPN beschleunigen

Tipp von Dobby zum Thema Firewall ...

Utilities

CCleaner 5.33 mit Malware infiziert

(27)

Information von SeaStorm zum Thema Utilities ...

Heiß diskutierte Inhalte
Utilities
CCleaner 5.33 mit Malware infiziert (27)

Information von SeaStorm zum Thema Utilities ...

Festplatten, SSD, Raid
gelöst Problem mit DELL 815R Server und Windows Bluescreen (24)

Frage von Leo-le zum Thema Festplatten, SSD, Raid ...

Windows Systemdateien
Windows bootet nicht mehr Fehlermeldung 0xc0000098 (19)

Frage von franzgoerlich zum Thema Windows Systemdateien ...

Windows Netzwerk
Dateien mit Intelligenz per GPO ins Programmverzeichnis (14)

Frage von erwin.t zum Thema Windows Netzwerk ...