Spaltenwerte selektieren und invertieren

Hallo,
ich habe folgende Situation
Spalte 1: Rechnungsbeträge die positiv oder negativ sein können und in der Datenbank mit einem positiven Wert gespeichert werden.
Spalte 2: Kennzeichen (G=Gutschrift, R=Rechnung) zeigt an, ob der Wert in Spalte 1 negativ oder positiv ist. Nun die Frage:

Wie kann ich eine DB-Abfrage mit SQL so manipulieren, dass in der Ausgabedatei die negativen Werte mit einem Minuszeichen erscheinen? Am Ende aller Zeilen möchte ich die Summe bilden. Geht es auch ohne View? Danke.

VG
Manu

CASE
Hi Manu,

mit einer CASE Anweisung:

SELECT CASE WHEN spalte2 = ‚G‘ THEN -spalte1
____________ELSE spalte1
_______END AS betrag
FROM dateiname

„______“ soll hier nur die Formatierung erhalten wegen besserer Lesbarkeit.

Gruss,
SomeOne

Hab das mit der Summe übersehen:

SELECT sum(CASE WHEN spalte2 = ‚G‘ THEN -spalte1
________________ELSE spalte1
___________END) AS betrag
FROM dateiname

Gruss,
SomeOne

Hallo SomeOne,

„______“ soll hier nur die Formatierung erhalten wegen

dafür gibt es doch das „PRE“-Tag, sieht auch irgendwie besser aus:

SELECT 
 CASE WHEN spalte2 = 'G' 
 THEN -spalte1
 ELSE spalte1
 END AS betrag
FROM 
 tabellenname;

gruss
b.dateiname

OT: PRE Tag
Hi,

*huch* wusste ich nicht dass das so einfach geht :wink: .

Also ich schalte das PRE-Tag ein, klimper meinen formatierten Text rein und schalte PRE wieder aus ?
Oder doch anders ?

Danke erst mal für den Hinweis, ich probiere das aus.

Gruss,
SomeOne

Danke für die Infos. Könnt Ihr mir eine gute SQL-Referenz für Fortgeschrittene empfehlen, wo man solche Befehle/Anweisungen nachlesen kann?
VG
Tiffi

Hallo,
ich habe noch eine Frage zu der Abfrage. Ich habe sie in meinen Query eingebaut und die negativen Werte werden 2* abgezogen. Habt Ihr eine Ahnung woran das liegen kann?
Danke.
VG
Manu

Servus Manu,

klingt nach meinem „Lieblingsfehler“, ich rate mal du hast in deinem Query einen JOIN, und der liefert n-fache Ergebnisse.

Da nun SQL zuerst JOINed und dann summiert, kommt es dazu dass zuerst doppelte Datensätze im Resultset stehen und die dann summiert werden … tadaaa, Fehler !

Magst du mal dein Original-SQL hier einstellen, damit wir darüber herfallen können :smile: ?

Gruss,
SomeOne

PS: ich hatte damals so einen 1000-Seiten Schinken über SQL, ich glaub der war vom Markt und Technik Verlag. Und viiiiel Praxis brauchst du !

Hallo Someone,

ich habe die Datenbank und die Abfragen von meinem Vorgänger geerbt. Mir ist dabei aufgefallen, dass die Ausgabe fehlerhaft ist. Leider ist die Datenbank derart kompliziert aufgebaut, dass ich mich sehr schwer tue. Eine Dokumentation über den Aufbau der Datenbank gibt es nicht. Die Namen der Tabellen sind mit kryptischen Bezeichnungen überschrieben, was die Arbeit nicht gerade erleichtert. Sorry mußte mal jammern.

In der Standard-Abfrage ist tatsächlich ein Join und zwar ein geschachtelter drin, da 3 Tabellen (oder mehr) pro Abfrage benötigt werden.

  1. Tabelle Name und Anschriften der Kunden
  2. Tabelle Daten zur Bestellung/Lieferung wie z. B. Artikel, Anzahl und Preis
  3. Tabelle Name und Anschrift des Lieferanten

Das Problem bei der ganzen Sache ist, dass der Kunde1 der Lieferant vom Kunden2 sein kann und umgekehrt. Die Verknüpfung bei der Abfrage erfolgt über die Kunden- bzw. Lieferantennummer. Wobei diese identisch sind.

a) Zusätzlich habe ich nun die Case-Abfrage ohne sum() eingebaut und habe Excel die Gesamtsumme rechnen lassen.
b) Die Gesamtsumme ist identisch mit dem Ergebnis, wenn ich die Abfrage ohne case laufen lasse und in Excel die negativen Werte per Hand ausbessere!
c) Wenn ich sum(case…) hinzufüge erhalte ich ein deutlich niedrigeres Ergebnis, als Excel rechnet.

a) liefert z. B. 100
b) liefert z. B. 100
c) liefert z. B. 33

Verringere ich die Anzahl der Spalten oder verändere den geschachtelten Join, dann habe ich wieder ein anderes Ergebnis, ebenfalls mit deutlichen Abweichungen.

Wenn ich wieder im Geschäft bin, dann kann ich die Original-Abfrage mal einstellen. Danke für die Unterstützung.
VG
Manu