システムに設定された為替レートの値を返すクエリがあります。すべての注文に為替レート(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
CASE
ステートメントを使用できます。
SELECT
CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
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/
SELECT
ISNULL(currate.currentrate, 1)
FROM ...
勝利の答えよりも冗長ではなく、同じことをします
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
以下のようにしてみてください...
CASE
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate