Laden...

erledigt: Im gleichen Select auf berechnete bzw. geänderte Spalte zugreifen

Erstellt von m.grauber vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.385 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 5 Jahren
erledigt: Im gleichen Select auf berechnete bzw. geänderte Spalte zugreifen

Hallo Experten!

Leider habe ich nichts gefunden und weiß auch nicht so recht nach welchem Suchbegriff ich suchen soll.

Ich möchte in einer Abfrage in einer Spalte je nachdem welche Kriterien pro Datensatz erfüllt sind mit geschachtelten CASE WHEN ... END mir Werte ermitteln und mit "AS" in die Spalte "MeinWert" überführen.

Zusätzlich möchte ich weitere Spalten erzeugen, die auf das Ergebnis in "MeinWert" zugreifen sollen und diesen Wert als Ausgang für anderes nutzen sollen.

Ich stelle es mir so vor:

SELECT CASE WHEN .... THEN TableField1 ELSE TableField2 END AS MeinWert, TableField2, TableField3,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis1,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis2,
CASE WHEN ... THEN MeinWert ELSE 0 AS Ergebnis3
FROM ....

oder

SELECT CASE WHEN .... THEN TableField1 ELSE TableField2 END AS MeinWert, TableField2, TableField3,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis1,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis2,
CASE WHEN ... THEN [1] ELSE 0 AS Ergebnis3

Der CASE WHEN, der später MeinWert ermittelt, ist später mehrfach verschachtelt und sollte daher nur 1x berechnet werden. Da ich mit den Spalten Ergebnis1 - 3 mehrfach darauf zugreifen möchte will ich den SQL-Befehl schnell und kurz halten.

Wie kann ich nun auf die 1. errechnete Spalte "MeinWert" zugreifen? Das klappt weder mit dem mit "AS" generierten Spaltennamen noch mit der Spaltennummer [1] die z. B. bei der Sortierung angegeben werden kann.

Später kommt zu allem "Übel" auch noch eine Gruppierungsfunktion über die Ergebnisse dazu, daher sollte die Lösung recht einfach sein.

Danke und gute Arbeit!

SQL-Server ab 2008

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

3.511 Beiträge seit 2005
vor 5 Jahren

Moin,

das lässt sich über Common Table Expressions (CTEs) lösen (https://docs.microsoft.com/de-de/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-2017).

Z.B.


WITH Bla AS
(
  SELECT
    CASE WHEN x = y THEN 1 ELSE 0 END AS Wert1
    CASE WHEN y = z THEN 1 ELSE 0 END AS Wert2
  FROM Tabelle
)
SELECT * FROM Bla
WHERE Wert1 = 0

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 5 Jahren

Hallo Khalid!

Tausend Dank für die super schnelle und präzise Info! Klappt super! 👍 👍 👍

Woher ihr das immer wisst... 😉

Ich hätte nie nach CTE gegoogled.

Noch eine wirklich erfolgreiche Rest-Woche!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

2.298 Beiträge seit 2010
vor 5 Jahren

Eine weitere Möglichkeit wären noch Sub-Selects ala


SELECT * 
FROM (
    SELECT
        CASE WHEN x = y THEN 1 ELSE 0 END AS Wert1,
        CASE WHEN y = z THEN 1 ELSE 0 END AS Wert2
    FROM Tabelle
) WHERE Wert1 = 0

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |