2013-02-19 17 views
43

私のシステムで設定された為替レートの値を返すクエリがあります。すべての注文が為替レート(currate.currentrate)を持つわけではありませんので、null値が返されます。SQLクエリ。値がnullの場合は1を返します。

nullの代わりに1を返すことはできますか?

ような何か文は多分場合:ここで

if isnull(currate.currentrate) then 1 else currate.currentrate 

は、以下の私のクエリです。私はあなたのすべての助けに感謝します!

SELECT  orderhed.ordernum, orderhed.orderdate, currrate.currencycode, currrate.currentrate 
FROM   orderhed LEFT OUTER JOIN 
        currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate 
+4

は([ 'ISNULL'] http://msdn.microsoft.com/en-us/library/ms184325.aspxを参照してください。 )ドキュメント(読み込み:どのように設計されたものを使用するか).. –

+1

@pst COALESCEはSQL標準であり、このような場合には一般的に推奨されています。データ型にどのように対応するかにも大きな違いがあります。おそらく、そのような追加情報であなたのコメントに注意する必要があります。 – swasheck

+0

@swasheckドキュメンテーションはこれを行います。また、COALESCEにリンクしています。 –

答えて

74

CASEステートメントを使用できます。

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END 
FROM ... 
+0

@pst - 操作の順序を変更することは難しくありません... –

+1

あなたの助けを借りて@ ek0nomikありがとう!それは魅力のように働いた! – jenhil34

+1

@ Ek0nomik私は上記の等価性を認めたが、ポイントを引き出したり、より良い説明を引き出すために下向き投票を適用すると、 "インターネットタフな男"となることは分かっていない。 –

39

あなたはCOALESCEを使用することができます。

SELECT orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode, 
    coalesce(currrate.currentrate, 1) as currentrate 
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate 

あるいはIsNull():ここ

SELECT orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode, 
    IsNull(currrate.currentrate, 1) as currentrate 
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate 

COALESCEIsNull間で決定するのに役立つ記事です:

http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

+3

あなたは青い脚があるので+1します。 – Kermit

+3

@njk彼らは本当に...私はsmurfの一部です – Taryn

+0

役に立つリンク。この答えには大きな意味があります。 – Ellesedil

2
SELECT orderhed.ordernum, orderhed.orderdate, currrate.currencycode, 

case(currrate.currentrate) when null then 1 else currrate.currentrate end 

FROM orderhed LEFT OUTER JOIN currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate 
0

あなたは0にしたい場合は、A)

CASE 
WHEN currate.currentrate is null THEN 1 
ELSE currate.currentrate 
END as currentrate 
-1

...以下のようにしてみてください値がnullの場合

SELECT isnull(PartNum,0) AS PartNumber, PartID 
FROM Part 

B)あなたは0にしたい場合は値がnullであり、そうでない場合は1

SELECT 
    (CASE 
    WHEN PartNum IS NULL THEN 0 
    ELSE 1 
    END) AS PartNumber, 
    PartID 
FROM Part 
関連する問題