![]() |
Datenbank: MSSQL Express Edition • Version: 2005 • Zugriff über: ADO
SQL-Abfrage Plus- und Minus-aufteilen
Hi,
ich habe eine SQL-Tabelle:
Code:
usw.
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 | 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:
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?
Monat | Plus | Minus
------+-------+------- 10 | 50.00 | -20.00 |
AW: SQL-Abfrage Plus- und Minus-aufteilen
Schau dir mal
Code:
oder
IIF
Code:
an, damit kannst du das lösen
CASE
|
AW: SQL-Abfrage Plus- und Minus-aufteilen
Du nimmst jeweils eine Abfrage für die positiven und die negativen Summen und führst sie mit einem FULL OUTER JOIN zusammen:
Code:
FULL OUTER JOIN deshalb, weil nicht gesagt ist, dass in jedem Monat sowohl positive als auch negative Summen auftreten.
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 Der Platzhalter (***1) steht für die positiven Summen:
Code:
Der Platzhalter (***2) steht für die negativen Summen:
SELECT Monat, SUM(Betrag) AS Summe FROM Tabelle
WHERE Betrag >= 0 GROUP BY Monat
Code:
Der Monat steht so zwar nicht direkt in deiner Tabelle, er lässt sich aber mit SQL berechnen.
SELECT Monat, SUM(Betrag) AS Summe FROM Tabelle
WHERE Betrag <= 0 GROUP BY Monat (Ich würde ja Jahr/Monat verwenden) Jetzt musst du nur noch die Teile zusammensetzen. |
AW: SQL-Abfrage Plus- und Minus-aufteilen
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
Delphi-Quellcode:
, so in der Art.
SELECT SUM(IfThen(preis < 0, preis, 0)) AS negativ, SUM(IfThen(preis > 0, preis, 0)) AS positiv ...
|
AW: SQL-Abfrage Plus- und Minus-aufteilen
Das ist schon mal die Basis:
Code:
und darauf kann man dann weiter aufbauen (GROUP)
SELECT
Datum, IIF( Betrag > 0, Betrag, 0 ) AS Plus, IIF( Betrag < 0, Betrag, 0 ) AS Minus FROM MyTable |
AW: SQL-Abfrage Plus- und Minus-aufteilen
Oder man nimmt den Käse (Case), das unterstützen AFAIK die meisten bekannten RDBMS.
|
AW: SQL-Abfrage Plus- und Minus-aufteilen
Zitat:
|
AW: SQL-Abfrage Plus- und Minus-aufteilen
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. |
AW: SQL-Abfrage Plus- und Minus-aufteilen
Zitat:
|
AW: SQL-Abfrage Plus- und Minus-aufteilen
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:
Nochmals...danke :-)
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz