2016-07-04 67 views
0

I SQL Server 2014 bin mit zeigen, und ich habe eine Abfrage mit dieser Codezeile:T-SQL-Syntax sowohl negative Werte und NULL-Wert als 0

ISNULL(b.[LEISURE],0) AS 'LEISURE' 

Der Wert der Freizeit kann auch negativ sein, In diesem Fall möchte ich, dass der Wert auch als 0 angezeigt wird.

Wie umgehe ich beide Bedingungen in meinem Code?

Antwort

1

Statt Ihren gegebenen Code-Block, zu verwenden:

IIF(b.[LEISURE] IS NULL OR b.[LEISURE]<0, 0, b.[LEISURE]) 

oder

IIF(b.[LEISURE]>=0, b.[LEISURE], 0) 
+0

Lieben Sie einfach die Einfachheit Ihrer Lösung! – user3115933

1

Verwendung CASE-Ausdruck ..

Case when b.lesure<0 or b.lesure is null then 0 else b.lesure End 
1

Sie CASE stattdessen verwenden:

SELECT CASE WHEN b.LEISURE IS NULL OR b.LEISURE <= 0 
     THEN 0 
     ELSE b.[LEISURE] END AS 'LEISURE' 
FROM dbo.TableName 
0

können Sie IIF verwenden:

SELECT IIF(LEISURE < 0, 0, COALESCE(LEISURE, 0)) 

Wenn LEISURE negativ ist, dann die oben IIF zu 0 auswerten, andernfalls, wenn LEISURENULL ist, COALESCE kehrt 0 wieder, ansonsten wird ein positiver Wert zurückgegeben wird.

3

Die Anweisung CASE ist der beste Weg, dies zu tun. Sie können es mit einem Vergleich tun:

SELECT (CASE WHEN b.leisure > 0 THEN b.leisure ELSE 0 END) 

A NULL Vergleich nicht wahr wertet, wenn sie 0 verglichen, so dass der explizite Vergleich der NULL ist nicht unbedingt notwendig.