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, 4670 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Multimedia & Zubehör
BENQ Beamer Fernbedingung Frequenz Problem (2)

Frage von xbast1x zum Thema Multimedia & Zubehör ...

Windows Server
Google Chrome Web Store Problem auf Terminal Farm

Frage von dakoerry zum Thema Windows Server ...

Multimedia & Zubehör
gelöst Problem: DVI zu VGA (8)

Frage von Protected zum Thema Multimedia & Zubehör ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...