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 :]
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)
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 :]
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 |