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 SQL Query mit Join, aufsummieren aber vorher negative Werte bestimmen

Mitglied: cmeese

cmeese (Level 1) - Jetzt verbinden

01.02.2014, aktualisiert 02.02.2014, 1943 Aufrufe, 3 Kommentare, 1 Danke

Hallo zusammen,
leider fällt es mir etwas schwer mein Problem kurz und knapp im Titel zu beschreiben.

Gegeben seien folgende 2 Tabellen:

Tabelle: Auftrag
01.
|-----------|-------|--------|----------| 
02.
|AuftragsID | Kunde | Blabla | Blubblub | 
03.
|-----------|-------|--------|----------| 
04.
|123456     | 134   | Text   | Text     | 
05.
|123457     | 134   | Text   | Text     | 
06.
|123458     | 134   | Text   | Text     | 
07.
|123459     | 134   | Text   | Text     | 
08.
|-----------|-------|--------|----------|
Tabelle: RechnungGutschrift
01.
|-----------|--------|------------|--------|----| 
02.
|AuftragsID | Betrag | Datum      | Nummer | Art| 
03.
|-----------|--------|------------|--------|----| 
04.
|123456     | 30500  | 01.01.2014 | 56781  | RE | 
05.
|123456     | 24500  | 01.01.2014 | 56782  | RE | 
06.
|123456     |  5000  | 01.01.2014 | 56783  | RE | 
07.
|123456     |  1000  | 01.01.2014 | 56784  | G  | 
08.
|123457     |  4380  | 01.01.2014 | 56782  | RE | 
09.
|123458     | 25460  | 01.01.2014 | 54323  | RE | 
10.
|123459     | 19870  | 01.01.2014 | 65634  | RE | 
11.
|-----------|--------|------------|--------|----|
Wenn ich nun die beiden Tabellen Joine und mir nur den Auftrag '123456' anzeigen lasse, erhalte ich folgendes Ergebnis:
01.
SELECT * FROM auftrag LEFT JOIN rechnunggutschrift ON auftrag.auftragsid = rechnunggutschrift.auftragsid WHERE auftrag.auftragsid = '123456' 
02.
 
03.
|-----------|-------|--------|----------||-----------|--------|------------|--------|----| 
04.
|AuftragsID | Kunde | Blabla | Blubblub ||AuftragsID | Betrag | Datum      | Nummer | Art| 
05.
|-----------|-------|--------|----------||-----------|--------|------------|--------|----| 
06.
|123456     | 134   | Text   | Text     ||123456     | 30500  | 01.01.2014 | 56781  | RE | 
07.
|123456     | 134   | Text   | Text     ||123456     | 24500  | 01.01.2014 | 56782  | RE | 
08.
|123456     | 134   | Text   | Text     ||123456     |  5000  | 01.01.2014 | 56783  | RE | 
09.
|123456     | 134   | Text   | Text     ||123456     |  1000  | 01.01.2014 | 56784  | G  | 
10.
|-----------|-------|--------|----------||-----------|--------|------------|--------|----|
Soweit schön und gut. Allerdings möchte ich nur eine Zeile pro Projekt zurück gegeben bekommen. Und zwar sollen die Rechnungsbeträge einfach aufsummiert werden. Im Prinzip ja einfach zu machen mit 'OUTER APPLY' und 'GROUP BY' und 'SUM(betrag)'. Das Problem ist jetzt das man die Beträge nicht einfach aufsummieren kann sondern berücksichtigen muss das auch Gutschriften in der Tabelle eingetragen sind. Also müsste man zuerst bei der Zeile wo 'art' = 'g' den 'betrag' negieren.

Wie kann ich also nun die Tabelle 'rechnunggutschrift' so dazu joinen das ich nur eine Zeile bekomme in der alle Werte aus 'betrag' addiert wurden aber berücksichtig wird das Zeilen mit 'art' = 'g' negativ sind, obwohl dort kein Vorzeichen eingetragen ist?

Das Ergebnis müsste ja so aussehen:
01.
|-----------|-------|--------|----------||--------| 
02.
|AuftragsID | Kunde | Blabla | Blubblub || Betrag | 
03.
|-----------|-------|--------|----------||--------| 
04.
|123456     | 134   | Text   | Text     || 59000  |    
05.
|-----------|-------|--------|----------||--------|
Würde mich sehr freuen wenn mich einer auf die richtige Spur setzt!
Mitglied: colinardo
LÖSUNG 01.02.2014, aktualisiert 03.02.2014
Hallo cmeese,
könnte man mit zwei SUB-SELECTS lösen welche die Summen für die Rechnungen und Gutschriften bildet, und die Gutsschriftsumme dann von den Rechnungen abzieht:
SELECT a.AuftragsID, a.Kunde, a.BlaBla, a.Blubblub, ( 
   SELECT SUM(r.Betrag)  
   FROM RechnungGutschrift r 
   WHERE r.AuftragsID = a.AuftragsID AND r.Art = 'RE' 
)-( 
   SELECT SUM(r.Betrag)  
   FROM RechnungGutschrift r 
   WHERE r.AuftragsID = a.AuftragsID AND r.Art = 'G' 
) AS Betrag 
FROM Auftrag a 
WHERE a.AuftragsID = '123456'
Grüße Uwe
Bitte warten ..
Mitglied: cmeese
02.02.2014 um 11:35 Uhr
Hallo Uwe,

vielen Dank für deine schnelle Hilfe.
Jetzt wo du es so schön hingeschrieben hast ist es ja recht logisch!

Habe nach mehreren Stunden probieren einfach nicht mehr den richtigen Weg gesehen. Vielen Dank für die Hilfe!
Bitte warten ..
Mitglied: Biber
03.02.2014, aktualisiert um 11:36 Uhr
Moin cmeese und colinardo,

würde es nicht auch mit einem Subselect reichen?

 
SELECT a.AuftragsID, a.Kunde, a.BlaBla, a.Blubblub 
 , ( SELECT SUM( Case r.Art  
               When 'RE', r.Betrag 
               when  'G', -r.Betrag 
               else 0 END             )  
   FROM RechnungGutschrift r  
   WHERE r.AuftragsID = a.AuftragsID  
) AS Betrag  
 
FROM Auftrag a  
WHERE a.AuftragsID = '123456'
Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL LEFT JOIN in Spalten
gelöst Frage von StfnCstrDatenbanken5 Kommentare

Hallo, ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich habe 2 Tabellen Tabelle 1: PK, Vorname, ...

Datenbanken
SQL - JOIN zeigt mehrfaches an
Frage von MiStDatenbanken9 Kommentare

Guten Morgen, ich habe mich frisch mit dem Thema SQL "angefreundet". Jetzt habe ich aber irgendwie ein Problem. Und ...

Datenbanken

MS-SQL-Abfrage min max und zugehörige Werte aus JOIN

Frage von AximandDatenbanken3 Kommentare

Hallo, wenn ich in einem JOIN über 2 Tabellen durchführe und mir min/max-Wert eines Feldes anzeigen lasse. Wie bekomme ...

Datenbanken

SQL - Mehrere Tabellen über JOINS verketten

Frage von GwahlersDatenbanken1 Kommentar

Aktuell habe ich das Problem dass die Ausgabe von meinen Erwartungen abweicht JOINS und Tabellen im Anhang Folgende Abfrage ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 15 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 18 StundenAdministrator.de Feedback14 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...