4

たぶん、SQLクエリで私を助けることができます:

セカンダリ テーブルと次の構造に変換値があります。

ID PRICE_BRL PRICE_USD
-- --------- ---------
1  10        5
2  12        NULL
3  NULL      3
4  14        NULL
5  NULL      4
6  NULL      NULL

NULL の場合、最初の列を優先するような結果セットが必要です。これにより、2 番目の列の値にセカンダリ テーブルに格納されている変換値を掛けた値が得られます。擬似コードのようなもの:

SELECT 
  id, 
  (
   IF (price_brl != null) 
     price_brl
   ELSE 
     price_usd * tbl_2.value
  ) as final_price
FROM tbl_1

Joinsを使えば簡単だと思うのですが、わかりません!

前もって感謝します。

4

5 に答える 5

9

擬似コードも:

select id, coalesce(price_brl, price_usd * tbl_2.value) 
from tbl_1
inner join tbl2
于 2009-02-03T17:34:38.703 に答える
3
select  id, isnull( price_brl, price_usd * tbl_2.value)
from    tbl_1
    inner join tbl_2
        on tbl_1.id=tbl_2.id

明らかに、結合を調整する必要があります。しかし、これでうまくいくと思います。

于 2009-02-03T17:36:22.693 に答える
3

coalesce() ステートメントは、例でやりたいことを正確に実行します。フィールドで null をテストし、null の場合は別の値を提供します。ただし、null のテスト以外のことをしたい場合 (null でも機能する場合) は、case ステートメントを使用できます。

SELECT id, CASE WHEN price_brl != NULL THEN price_brl ELSE price_usd * tbl_2.value END as final price...
于 2009-02-03T17:37:37.887 に答える
1

別の方法は次のとおりです。

SELECT id, 
CASE WHEN price_brl IS NULL THEN (price_usd * tbl_2.Value)
ELSE 
price_brl
END AS Final_Price
FROM tbl_1
JOIN tbl_2 ON /*Join Conditions and then Where conditions*/

ただし、上記の Coallesce オプション (3 つ以上のオプションがある場合) または IsNull (2 つの選択肢があるように見えるため) のいずれかをお勧めします。

于 2009-02-03T18:01:37.120 に答える