我正在尝试翻译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]
else Hrs_Derate
等于零。
答案 0 :(得分:1)
您需要翻译三个元素:
(cond) ? trueval : falseval
.Contains
运算符,可以检查数组中是否包含元素。System.Convert
中的相同方法处理的。有了这三个翻译规则,你需要这样的东西(未经测试):
var types = new [] { "D1", "D2", "D3", "DP", "PD", "DM", "D4" };
Hrs_Derate =
((types.Contains(gads.GadsEventTypeCode) ? allocation.AllocatedEnergyMwh : 0)
/ (Convert.ToFloat(unit.NetDependableCapacity))).Sum()
答案 1 :(得分:1)
你不在那里。
“如果[Gads]。[GadsEventTypeCode] 等于'D1','D2','D3','DP','PD','DM','D4'”
这会检查GadsEventTypeCode
列出的所有值。
“然后Hrs_Derate等于: [分配]。[AllocatedEnergyMwh] / [Unit]。[NetDependableCapacity]“
这涵盖了其余部分。关于ELSE 0
的位使其忽略不符合GadsEventTypeCode
条件的行,即添加零不会影响SUM
。 NULL
也可以使用。