用于创建范围

时间:2017-02-07 15:31:54

标签: sql sql-server database

我目前正在使用Microsoft SQL Server。我正在尝试在视图中使用case表达式来创建范围。

以下是一个例子:

  • 范围最小值不能低于0.
  • 范围最大值不能超过100。
  • 预期输出IE: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

2 个答案:

答案 0 :(得分:1)

在您编辑后的缺失括号之上,您还需要包含else子句,因为如果您的计算在第一个0以上时您的版本未返回值第二个case100以下{/ 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