我正在嘗試翻譯一個SQL CASE語句,但遇到了一些問題,並希望能得到一隻手。以下是該語句:無法翻譯SQL語句
,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
等於零。
@ mellamokb - 感謝您的幫助,特別是關於.Contains運算符。我一定會利用它。但是,在我可以將SQL翻譯成LINQ之前,我必須明白聲明的意思。那正是我想要包裹我的頭。我在上面創建的if語句是否正確地翻譯了SQL語句的內容? –
是的,你對代碼有一個粗略的認識。請注意,'GadsEventTypeCode'可能對每一行都不相同,所以它不會計算* Allocation.AllocatedEnergyMwh/Unit.NetDependeableCapacity或'0'的總和,但它通過行「循環」,並說,如果該行有一種類型的「D1,D2,...」,則將能量/容量添加到正在運行的總數中,否則將添加0.在表中的所有行中,一些將匹配類型代碼並貢獻一個值朝向總和,有些不匹配,因此對總和貢獻0。 – mellamokb
@ mellamokb:啊,好的。這就說得通了。非常感謝你的澄清。你一直在幫助很大!我現在明白了。 –