Ich versuche, die folgende Abfrage übersichtlicher zu gestalten, damit ich meinen Code nicht dupliziere.

SELECT CASE WHEN <COMPLICATED CODE THAT RETURNS A SINGLE INT> = 0
THEN 1
ELSE <COMPLICATED CODE THAT RETURNS A SINGLE INT> END

Im Idealfall möchte ich so etwas mit einer vorhandenen Funktion tun, anstatt meine eigene zu erstellen:

SELECT ISVALUE(COMPLICATED CODE THAT RETURNS A SINGLE INT,0,1)
1
fosbie 18 Jän. 2019 im 15:13

4 Antworten

Beste Antwort

Sie können apply verwenden:

SELECT (CASE WHEN v.val = 0 THEN 1 ELSE v.val END)
FROM . . . CROSS APPLY
     (VALUES (<COMPLICATED CODE THAT RETURNS A SINGLE INT>)) v(val);

Sie können auch eine Reihe von Funktionen ausführen:

select coalesce(nullif(<COMPLICATED CODE THAT RETURNS A SINGLE INT>, 0), 1)

Ich denke jedoch, dass apply klarer ist. Darüber hinaus werden aus den oben genannten Werten NULL Werte 1 sowie 0.

7
Gordon Linoff 18 Jän. 2019 im 12:15

Sie können einen CTE (oder eine Unterabfrage) als verwenden

WITH CTE AS
(
  SELECT <COMPLICATED CODE THAT RETURNS A SINGLE INT> AS Value
  FROM ...
)
SELECT CASE WHEN Value = 0 THEN 1 ELSE Value END
FROM CTE

Auf diese Weise schreiben Sie den komplizierten Code nur einmal und verwenden dann nur die Spalte Value.

4
Sami 18 Jän. 2019 im 12:25

Sie können IIF verwenden:

SELECT IIF(1 = 1, 'true', 'false')

https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql

0
Kristofer 18 Jän. 2019 im 12:15

Wenn Sie eine Unterabfrage verwenden, können Sie eine mathematische Formel finden, die die gewünschten Werte liefert. Auf diese Weise können Sie die tatsächliche boolesche Logik eliminieren und durch mathematische Funktionen ersetzen, die ein Beispiel sind

SELECT *,(1 - ceiling(cos(atan(abs(cast(x as float)))) - 
           floor(cos(atan(abs(cast(x as float))))))) + 
           x * ceiling(cos(atan(abs(cast(x as float)))) - 
           floor(cos(atan(abs(cast(x as float)))))) as Computed
FROM
( select 0 as x union SELECT 1 X UNION SELECT -.123 UNION SELECT 9.1 UNION SELECT 67000 union select -1) OQ
-1
Cato 18 Jän. 2019 im 12:38