AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Abfrage Plus- und Minus-aufteilen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage Plus- und Minus-aufteilen

Ein Thema von Captnemo · begonnen am 6. Nov 2012 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:01
Datenbank: MSSQL Express Edition • Version: 2005 • Zugriff über: ADO
Hi,

ich habe eine SQL-Tabelle:

Code:
Datum     | Betrag |
-----------+--------+
01.10.2012 |  10.00 |
02.10.2012 | -15.00 |
03.10.2012 |  -5.00 |
04.10.2012 |  20.00 |
05.10.2012 |  20.00 |
usw.

Auf die Tabelle möchte ich jetzt eine Abfrage machen, die mir die Spalte Betrag summiert, aber getrennt nach Minus- und Pluswerten.

Also zum Beispiel gruppiert nach Monat:

Code:
Monat |  Plus | Minus
------+-------+-------
10    | 50.00 | -20.00
Das ganze natürlich in einer Abfrage. Natürlich könnte ich 2 Abfragen machen, und die dann später in der Anwendung zusammensetzen. Aber ich denke das müßte doch auch in einer gehtn, oder?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:20
Schau dir mal
Code:
IIF
oder
Code:
CASE
an, damit kannst du das lösen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:31
Du nimmst jeweils eine Abfrage für die positiven und die negativen Summen und führst sie mit einem FULL OUTER JOIN zusammen:
Code:
SELECT Monat, TabA.Summe AS Plus, TabB.Summe AS Minus FROM
(***1) TabA FULL OUTER JOIN (***2) TabB ON TabA.Monat = TabB.Monat
ORDER BY Monat
FULL OUTER JOIN deshalb, weil nicht gesagt ist, dass in jedem Monat sowohl positive als auch negative Summen auftreten.

Der Platzhalter (***1) steht für die positiven Summen:
Code:
SELECT Monat, SUM(Betrag) AS Summe FROM Tabelle
WHERE Betrag >= 0
GROUP BY Monat
Der Platzhalter (***2) steht für die negativen Summen:
Code:
SELECT Monat, SUM(Betrag) AS Summe FROM Tabelle
WHERE Betrag <= 0
GROUP BY Monat
Der Monat steht so zwar nicht direkt in deiner Tabelle, er lässt sich aber mit SQL berechnen.
(Ich würde ja Jahr/Monat verwenden)
Jetzt musst du nur noch die Teile zusammensetzen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:33
Im Notfall könnte man bestimmt auch einen JOIN verwenden.
z.B. im SELECT alle + summieren und im JOIN alle -

Ansonsten meint Sir Rufo wohl sowas wie SELECT SUM(IfThen(preis < 0, preis, 0)) AS negativ, SUM(IfThen(preis > 0, preis, 0)) AS positiv ... , so in der Art.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Nov 2012 um 21:37 Uhr) Grund: deswegen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:45
Das ist schon mal die Basis:
Code:
SELECT
  Datum,
  IIF( Betrag > 0, Betrag, 0 ) AS Plus,
  IIF( Betrag < 0, Betrag, 0 ) AS Minus
FROM
  MyTable
und darauf kann man dann weiter aufbauen (GROUP)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:47
Oder man nimmt den Käse (Case), das unterstützen AFAIK die meisten bekannten RDBMS.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:50
Oder man nimmt den Käse (Case), das unterstützen AFAIK die meisten bekannten RDBMS.
Jo, aber es geht hier ja konkret um MSSQL
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:51
Oder aber Subselects, wobei das sicher am unelegantesten ist:


Select Distinct Year(Datum) as Jahr, Month(Datum) as Monat,
(Select Sum(Betrag) From Tabelle Where Betrag>0 and Year(Datum)=Year(T.Datum) and Month(Datum)=Month(T.Datum)) as Plus,
(--analog--) as Minus
From Tabelle T

Die Funktionen Month() und Year() oder vergleichbar auf der DB vorausgesetzt und das Jahr mal mit berücksichtigt.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 6. Nov 2012, 21:57
Jo, aber es geht hier ja konkret um MSSQL
Schon klar, aber wozu spezifische Optionen benutzen, wenn es auch allgemeiner geht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#10

AW: SQL-Abfrage Plus- und Minus-aufteilen

  Alt 7. Nov 2012, 06:58
Danke für alle Antworten.
Letztlich habe ich mich für Case entschieden, weil im Management Studio hat er bei allen IF-Statements immer nur rumgemeckert. Ich hab zwar überall nach dem richtigen Syntax gegoogelt, aber trotzdem hat ihn immer irgendwas gestört. Aber mit Case hat's dann auf Anhieb funktioniert.

Hier mein Statement:
Code:
SELECT

SUM(case when betrag>0 then betrag else 0 end) as Plus,
SUM(case when betrag<0 then betrag else 0 end) as Minus,
month(datum)

  FROM [VS2004].[dbo].[bank]
  where year(datum)=2012
  group by Month(datum)
Nochmals...danke
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz