Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 4696 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 Auswertung 2 Joins und SUM

Frage von c64b311ee9 zum Thema Datenbanken ...

Windows Server
gelöst WDS - mit optionalen Domain Auto-join? (1)

Frage von JiggyLee zum Thema Windows Server ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
gelöst Raid-Controller (Areca) Datenverlust trotz R5 (16)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...

Server-Hardware
HP ProLiant DL380 G7, POST Error: 1785-Drive Array not Configured (10)

Frage von Paderman zum Thema Server-Hardware ...

Microsoft Office
gelöst Office 365 Pro Domäne einrichten OHNE Webseite (9)

Frage von thklemm zum Thema Microsoft Office ...

Voice over IP
48 Port VOIP Switch mit POE gesucht (8)

Frage von brutzler zum Thema Voice over IP ...