4

さて、私はいくつかの Web 掘り下げを行いましたが、この状況を機能させる方法、または可能であるとしても見つけることができないようです。

私は SQL Server 2008 を使用しており、外国為替レートに関するいくつかの値を計算しようとしている計算列があります。

長期的には 1 つのテーブルの方が簡単かもしれませんが、2 つの異なるテーブルを使用する正しいソリューションを使用したいと考えています。

テーブルt1には、トランザクションのログが格納されます。テーブルt2には、特定の通貨の基本情報が格納されています。2 つのテーブルは、currencyCode属性を使用して結合できます。

スティッキーな部分には、通貨に依存する計算が付属しています。現在、計算はCR1 CR2 CR3またはのみ異なりますCR4が、将来、より多くの通貨が追加されると、新しい通貨が異なる可能性があります。したがって、理想的には、新しい行が追加され、別の計算を使用するか使用しないかを指定t2するビット フラグ ( ) が設定されます。flagCurrencyCalc

したがって、現在の式は次のようになります。

(case when [currencyCode]='CR1' OR [currencyCode]='CR2' OR [currencyCode]='CR3' OR [currencyCode]='CR4' then (formula1) else (formula2) end)

ご覧のとおり、新しい currencyCode を使用して別の OR ステートメントを追加することにより、手動で入力して形式を変更する必要があります。

次の行に沿って何かを行うことは可能でしょうか:

(case when t2.flagCurrencyCalc=Truet1 で見つかったレコードの特定の通貨コードthen (formula1) else (formula2) end)

???

4

2 に答える 2

4

計算列内の別のテーブルに直接アクセスすることはできません (こちらを参照)。

ここにいくつかのオプションがあります。

次を使用して式を簡略化できますin

(case when currencyCode in ('CR1', 'CR2', 'CR3', 'CR4')
      then (formula1)
      else (formula2)
 end)

ビューを使用できます:

create view vw_tablename as
    select t.*,
           (case when currencyCode in (select currencyCode from ListOfCurrencies where . . . )
                 then (formula1)
                 else (formula2)
            end)
    from t;

通貨をチェックする関数を定義できます。

于 2013-06-21T17:31:17.420 に答える