我目前正在使用Microsoft SQL Server。我正在尝试在视图中使用case表达式来创建范围。
以下是一个例子:
22.67-88.23
。这是我的尝试。
CONVERT(varchar(12)
,(CASE WHEN (X.AVG - (2 * X.AVG)) < 0
THEN 0
END
+ '-'
+ CASE WHEN (X.AVG + (2 * X.AVG)) > 100
THEN 100
END
)) as Range
答案 0 :(得分:1)
在您编辑后的缺失括号之上,您还需要包含else
子句,因为如果您的计算在第一个0
以上时您的版本未返回值第二个case
或100
以下{/ 1}}:
CONVERT(varchar(12)
,(CASE WHEN (X.AVG - (2 * X.AVG)) < 0
THEN 0
ELSE X.AVG - (2 * X.AVG)
END
+ '-'
+ CASE WHEN (X.AVG + (2 * X.AVG)) > 100
THEN 100
ELSE X.AVG - (2 * X.AVG)
END
)
) as Range
答案 1 :(得分:1)
您可以将整个案例表达式大规模简化为此。它可能是你真正想要的,因为它似乎与你的书面解释相矛盾,但它在逻辑上与你编码的一样。
case
when X.AVG * 3 > 100 then '100'
when X.AVG > 0 then '0'
else 'Invalid' --Or maybe you want to put convert(varchar(12), X.AVG) here?
end