2017-02-24 4 views
0

Ich habe eine Sicht in MY SQL-Server erstellen, wo ich CASE Bedingung verwenden muss, um eine Anforderung zu erfüllen.Wie Bedingung beim Erstellen neuer Spalte in SQL-Sicht verwenden

select 
    cast([SIR Per Occ] as float) * 1000000 as [SIR Per Occ], 
    cast([SIR Agg] as float) * 1000000 as [SIR Agg], 
    cast([Per Occ Limit Between] as float) * 1000000 as [Per Occ Limit Between], 
    cast((cast([SIR Per Occ] as float)) + (cast([Per Occ Limit Between] as float)) as float) * 1000000 as [Policy Occ Attachment], 
    cast((cast([SIR Agg] as float)) + (cast([Per Occ Limit Between] as float)) as float) * 1000000 as [Policy Agg Attachment] 
from IT.dbo.Policy_find 

Aber in meiner Aufgabe, wenn die [Per Occ Limit Between]NULL Werte ist, dann muss ich es als Null und der obige Code wie folgende Logik arbeiten, anzunehmen sollte:

Policy Occ Attachment = [SIR Per Occ] 
Policy Agg Attachment = [SIR Agg] 

Wie würde ich umsetzen ein solches Szenario in der Select-Klausel ohne Verwendung von where Bedingung?

Antwort

2

Verwenden Sie CASE nur mit Ihrer Spaltendefinition anstelle des Spaltennamens (CASE MSDN here).

EDIT (für SQL Server): Wenn Sie NULL-Werte entfernen möchten, Sie ISNULL(YOUR_EXPRESSION, '')

+0

Fall, wenn [Per Occ Grenze Zwischen] ist null then 0 else gegossen ([Per Occ Grenze Zwischen] als float) * 1000000 Ende als [Pro Occ Grenze Zwischen] .. Das funktionierte bis zu einem gewissen Grad, aber immer noch die 0 als Zeichenfolge und summiert sich nicht – Mike

+0

Sie können immer noch eine CAST über Ihren Fall verwenden? 'CAST (FALL WENN exp THEN 0 ELSE 1 END, float)' Es ist ein bisschen übertrieben, sollte aber gut funktionieren – Lostblue

0

verwenden kann ich nicht entscheiden konnte, ob es mein "SQL Server" ist oder "MY SQL" Server.

Aber tatsächlich, für diese spezifische Abfrage ist es egal.

Verwendung COALESCE

select 
    cast([SIR Per Occ] as float) * 1000000 as [SIR Per Occ], 
    cast([SIR Agg] as float) * 1000000 as [SIR Agg], 
    cast([Per Occ Limit Between] as float) * 1000000 as [Per Occ Limit Between], 
    cast((cast([SIR Per Occ] as float)) + (cast(COALESCE([Per Occ Limit Between],0) as float)) as float) * 1000000 as [Policy Occ Attachment], 
    cast((cast([SIR Agg] as float)) + (cast([Per Occ Limit Between] as float)) as float) * 1000000 as [Policy Agg Attachment] 
from IT.dbo.Policy_find 
Verwandte Themen