2016-11-11 23 views
0

2つの数値列NUMとDENを持つテーブルがあるとします。 私はDENが0でない場合にのみ、比率NUM/DENを抽出する必要があります。[...]のいくつかの種類であるSQLクエリ内の数式内のIFステートメント

select ID, [...] AS RATIO 
from Table 

:そう比は、このような0

何かする必要がありますエクセル式IF(DEN = 0; 0; NUM/DEN)に相当する。

このようなクエリを実行する方法はありますか?

多くの感謝!

+0

が重複する可能性を(http://stackoverflow.com/questions/63447/how-to-perform-an-if-then-in-an-sql-select) – uTeisT

+0

'SELECT ISNULL(NUM/NULLIF(DEN、0)、0)' SQL Serverの場合 – Fabio

+0

あなたが実際にそれを最初に検索した場合、時間がかかりませんでした。* downvoted&flagged * – uTeisT

答えて

1

これは動作するはずです:SQL Server 2012のは、あなたが使用することができます

case 
    when DEN = 0 then 0 
    else NUM/DEN 
end 
0

場合:あなたが探しているものIIF

IIF (boolean_expression, true_value, false_value) 
0

はい、caseです。あなたはw0lfが述べたように、あなたがcaseステートメントを使用することができ、SQL Serverを使用しているか、あなたがそうのようiifステートメントを使用することができれば

case [variable] 
    when [value1] then [output1] 
    when [value2] then [output2] 
    when [value3] then [output3] 
    ... 
    else [outputdefault] end 

case when [Boolean(True/false) expression 1] then [output1] 
     when [Boolean(True/false) expression 2] then [output2] 
     when [Boolean(True/false) expression 3] then [output3] 
    ... 
    else [outputdefault] end 
0

select iif(age > 21, 'Allowed', 'Not Allowed') as status 
from test; 

それは2つのバージョンがあります例:

create table test (
    fullname varchar (20), 
    age int 
); 

insert into test values 
('John', 10), 
('Matt', 90), 
('Jane', 25), 
('Ruby', 80), 
('Randy', null); 

結果は

| fullname |  status | 
|----------|-------------| 
|  John | Not Allowed | 
|  Matt |  Allowed | 
|  Jane |  Allowed | 
|  Ruby |  Allowed | 
| Randy | Not Allowed | 

同じことが

select case when age > 21 then 'Allowed' else 'Not Allowed' end as status 
from test; 

case文は、多くのデータベースエンジンによって使用されているように記述することができます。

あなたがnullではなくNULL値を扱っている場合は、そのよう​​3210を使用することができます。

select fullname, coalesce(age, 999) as status 
from test; 

結果を次のようになります。

| fullname | status | 
|----------|--------| 
|  John |  10 | 
|  Matt |  90 | 
|  Jane |  25 | 
|  Ruby |  80 | 
| Randy | 999 | 

を最初にあなたは​​3210はないと思うかもしれif age is null then 999 else age。 sort-ofを実行しますが、特に​​3210は最初のNULL以外の値をリストに出力します。だから、coalesce(null, null, 45)は45 coalesce(null, 33, 45)になりますSQLフィドルで遊んで気軽に33

になります:[?THEN SQL SELECTで... IFを実行する方法]のhttp://sqlfiddle.com/#!6/a41a7/6

関連する問題