Spaltenwerte von Aliase addieren

Spaltenwerte von Aliase addieren

am 04.10.2006 15:33:44 von Steffen Mosthaf

Hallo du!

Wer kann mich auf den richtigen Weg bringen um mehrere Zahlen als Aliase
einer Abfrage zu addieren.

SELECT
CASE
WHEN spalte1 = 'foo' THEN 5
ELSE 0
END AS aliasEins,

CASE
WHEN spalte2 = 'bar' THEN 3
ELSE 0
END AS aliasZwei
FROM ...

Jetzt soll eben noch pro Datensatz am Ende eine Summe von
aliasEins + aliasZwei = aliasSumme
als neuer Alias gebildet werden, (Sinn und Unsinn sei jetzt mal
dahingestellt) ;)

Ich kenne folgendes Dokument das Probleme mit Aliase beschreibt:
http://dev.mysql.com/doc/refman/5.1/de/problems-with-alias.h tml

Es gibt den unschönen Workaround, die beiden "CASE"-Abschnitte einfach
nochmal aber diesemal _ohne_ Aliasnamen im Selectbereich einzufügen und
die Summe mit dem Operator "+" zu berechnen.

Gibt es vielleicht eine Funktion die ich übersehen habe?

Gruß
Steffen
--
(o_ | PGP-Key-ID: 0x80F9C604
//\ | ICQ: 116609337
V_/_ | registered Linux User #215802 @ http://counter.li.org
LINUX, weils Betriebssystem eben ned wurscht ist!

Re: Spaltenwerte von Aliase addieren

am 04.10.2006 15:44:04 von dnoeth

Steffen Mosthaf wrote:

> SELECT
> CASE
> WHEN spalte1 = 'foo' THEN 5
> ELSE 0
> END AS aliasEins,
>
> CASE
> WHEN spalte2 = 'bar' THEN 3
> ELSE 0
> END AS aliasZwei
> FROM ...
>
> Jetzt soll eben noch pro Datensatz am Ende eine Summe von
> aliasEins + aliasZwei = aliasSumme
> als neuer Alias gebildet werden, (Sinn und Unsinn sei jetzt mal
> dahingestellt) ;)

Dafür nimmt man normalerweise Derived Tables:

select
aliasEins,
aliasZwei,
aliasEins + aliasZwei as aliasSumme
from
(
SELECT
CASE
WHEN spalte1 = 'foo' THEN 5
ELSE 0
END AS aliasEins,

CASE
WHEN spalte2 = 'bar' THEN 3
ELSE 0
END AS aliasZwei
FROM ...
) as dt

Dieter

Re: Spaltenwerte von Aliase addieren

am 04.10.2006 16:14:55 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Danke für die zwei Antworten. (NT), was: Spaltenwerte von Aliase addieren

am 05.10.2006 09:31:56 von Claus Reibenstein

Steffen Mosthaf schrieb:

> ..

Was wollen uns diese beiden Punkte sagen?

Gruß. Claus

Re: Danke fürdie zwei Antworten. (NT), was: Spaltenwerte von Aliase addieren

am 05.10.2006 10:05:03 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Danke fürdie zwei Antworten. (NT), was: Spaltenwerte von Aliase addieren

am 05.10.2006 11:14:44 von Steffen Mosthaf

Claus Reibenstein wrote:

> Steffen Mosthaf schrieb:
>
>> ..
>
> Was wollen uns diese beiden Punkte sagen?
>
> Gruß. Claus

Beim Abschicken der Meldung kam der Hinweis das kein Text dabei ist, was
ich ja auch so wollte (siehe '(NT)' im Betreff).
Weil dann aber die Sendung verhindert wurde habe ich ohne groß zu
überlegen einfach einen Punkt reingemacht.

Hoffentlich ist/war jetzt keiner zu verwirrt ;)

Gruß
Steffen

Re: Danke fürdie zwei Antworten. (NT), was: Spaltenwerte von Aliase addieren

am 05.10.2006 11:41:40 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Danke für die zwei Antworten. (NT) (was: Spaltenwerte von Aliase addieren)

am 05.10.2006 11:42:54 von Claus Reibenstein

Steffen Mosthaf schrieb:

> Beim Abschicken der Meldung kam der Hinweis das kein Text dabei ist, was
> ich ja auch so wollte (siehe '(NT)' im Betreff).

So etwas tut man nicht!

Wenn Du etwas zu sagen hast, sage es im Body. Dazu ist er da. Das
Subject ist nur eine Überschrift. Dies sollte man auch nicht einfach so
nach Lust und Laune ändern, und wenn, dann bitte RFC-konform, damit die
gängigen Newsreader dies auch mitbekommen!

Ich habe Deinen verkorksten Header mal entsprechend korrigiert.

> Weil dann aber die Sendung verhindert wurde

Zu recht!

> habe ich ohne groß zu
> überlegen einfach einen Punkt reingemacht.

Hättste mal besser überlegt. Erst denken, dann handeln!

Gruß. Claus