2017-02-24 3 views
0

要件を満たすために、CASE条件を使用する必要があるMY SQLサーバーでビューを作成しました。SQLビューで新しい列を作成するときに条件を使用する方法

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 

しかし[Per Occ Limit Between]NULL値であれば、私の仕事で、私はそれがゼロになると想定する必要があり、上記のコードは、ロジックを次のように作業する必要があります。

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

どのように実装しますこのようなシナリオはwhereの条件を使用せずにselect句では?

答えて

2

カラム名(CASE MSDN here)ではなくカラム定義でCASEを使用してください。 (SQL Serverの場合)

EDIT:あなたはNULL値を削除したい場合、あなたはそれが私の "SQLサーバー" または "MY SQL" サーバの場合、私が決めることができませんでしたISNULL(YOUR_EXPRESSION, '')

+0

ケース[OCCリミット毎の間]は、その後、0他のキャスト(floatとして[OCCごとの上限の間])nullである* 1000000エンドとしてこの加工した.. [OCCリミット毎の間]ある程度までは、それでも0を文字列とみなし、 – Mike

+0

を追加しません。あなたはまだあなたのケースに対してCASTを使用できますか? 'CAST(CASEの場合は0を指定し、1が浮動小数点の場合) 'これはちょっと残念ですが、うまく動作するはずです – Lostblue

0

を使用することができます。

しかし、実際には、この特定のクエリでは問題ありません。

使用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 
関連する問題