web-dev-qa-db-ja.com

SQLクエリ。値がnullの場合、1を返します

システムに設定された為替レートの値を返すクエリがあります。すべての注文に為替レート(currate.currentrate)があるわけではないため、null値を返します。

Nullではなく1を返すようにできますか?

多分ifステートメントのようなもの:

 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
55
jenhil34

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

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

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/

47
Taryn
SELECT 
    ISNULL(currate.currentrate, 1)  
FROM ...

勝利の答えよりも冗長ではなく、同じことをします

https://msdn.Microsoft.com/en-us/library/ms184325.aspx

10
Barka
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  
2
ty733420

以下のようにしてみてください...

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