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, 1973 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 - 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
SQL Join Felder nicht editierbar
gelöst Frage von grill-itDatenbanken6 Kommentare

Hallo zusammen, ich habe eine (My)SQL Abfrage über zwei Tabellen formuliert. Allerdings habe ich jetzt das Problem, dass ich ...

Batch & Shell
Reg query wert als platzhalter in batch
Frage von 136298Batch & Shell4 Kommentare

guten morgen, da ich gerade eine phase nach input habe wäre ich dankbar wenn ihr mir hierbei helfen könnt ...

Datenbanken
SQL-Query - Like Operator - Usereingabe
gelöst Frage von SchelinhoDatenbanken4 Kommentare

Hallo! Ich habe ein SQL-Script, welches als solches auf der Datenbank im SQL-Developer funktioniert. Mir geht es um eine ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 StundenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 6 StundenSicherheit

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 1 TagInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 1 TagWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Glasfaserkabel verlegen und Anschlüsse setzen
Frage von LLL0rdLAN, WAN, Wireless20 Kommentare

Hallo Leute, ich muss demnächst ein Netzwerkkabel auf einer Länge von ca. 70 Metern verlegen. Das Netzwerkkabel soll dabei ...

Server-Hardware
Server Hardwareempfehlung für Projekt
gelöst Frage von heax22Server-Hardware12 Kommentare

Hallo zusammen, ich bin auf der Suche nach einer geeigneten Server Plattform um unter Hyper-V einen virtuellen Server 2016 ...

Basic
VBS soll alle Ordner auswählen, die im Startmenu angezeigt werden
Frage von Senseless-CreatureBasic12 Kommentare

Guten Morgen - gibt es eine Möglichkeit, per VBS das Startmenu in Win10 zu modifizieren? Ich beherrsche VBS mittlerweile ...

E-Mail
Wie funktionieren DNS Blacklisten?
gelöst Frage von WinLiCLIE-Mail12 Kommentare

Ich frage mich schon seit längerem, woher genau die Blacklisten für die Mailserver die Domains und Ips kennen die ...