76

システムで設定された為替レート値を返すクエリがあります。すべての注文に為替レート (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
4

6 に答える 6

135

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

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
于 2013-02-19T16:53:18.537 に答える
51

使用できます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

COALESCEとのどちらかを決定するのに役立つ記事を次に示しますIsNull

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

于 2013-02-19T16:54:11.953 に答える
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  
于 2013-02-19T16:55:04.607 に答える
0

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

CASE 
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate
于 2013-02-19T16:56:03.530 に答える