1

SQL CASE ステートメントを翻訳しようとしていますが、いくつかの問題が発生しており、手を差し伸べることを望んでいました。ここに声明があります:

,SUM(CASE WHEN [Gads].[GadsEventTypeCode] IN ('D1', 'D2', 'D3', 'DP', 'PD', 'DM', 'D4')
    THEN [Allocation].[AllocatedEnergyMwh] ELSE 0 END / 
    CAST([Unit].[NetDependableCapacity] AS FLOAT)) AS Hrs_Derate

これは私が思いついたものですが、「翻訳で失われる」:

[Gads].[GadsEventTypeCode]等しい場合は'D1', 'D2', 'D3', 'DP', 'PD', 'DM', 'D4'
Hrs_Derate次の合計に等しくなります。
[Allocation].[AllocatedEnergyMwh] / [Unit].[NetDependableCapacity]
そうでない場合は、Hrs_Derateゼロに等しくなります。

4

2 に答える 2

1

翻訳する必要がある 3 つの要素があります。

  1. CASE ステートメント - これは三項式で 処理できます。(cond) ? trueval : falseval
  2. IN 句 -.Contains要素が配列内に含まれているかどうかを確認できる LINQ 演算子があります。
  3. キャスト - 私が信じているキャスト演算子は、 と同じ方法で処理されSystem.Convertます。

これら 3 つの変換ルールを使用すると、次のようなものが必要になります (未テスト)。

var types = new [] { "D1", "D2", "D3", "DP", "PD", "DM", "D4" };

Hrs_Derate =
    ((types.Contains(gads.GadsEventTypeCode) ? allocation.AllocatedEnergyMwh : 0)
    / (Convert.ToFloat(unit.NetDependableCapacity))).Sum()
于 2012-05-29T13:52:41.533 に答える
1

あなたはまだそこにいません。

「[Gads].[GadsEventTypeCode]が'D1'、'D2'、'D3'、'DP'、'PD'、'DM'、'D4' に等しい場合」

これは、リストされた値のいずれかGadsEventTypeCodeであることを確認します。

「次に、Hrs_Derate は [Allocation].[AllocatedEnergyMwh] / [Unit].[NetDependableCapacity] の合計に等しい」

それは残りをカバーします。about ビットELSE 0は、条件を満たさない行を無視するようにしGadsEventTypeCodeます。つまり、ゼロを追加してもSUM. ANULLも同様に機能します。

于 2012-05-29T14:20:54.880 に答える