【发布时间】:2013-01-15 21:57:26
【问题描述】:
我正在寻找一种使用小于和大于符号在 sql 选择查询中构建 case 语句的方法。比如我想根据一个变量来选择排名:
DECLARE @a INT
SET @a = 0
SELECT CASE
WHEN @a < 3 THEN 0
WHEN @a = 3 THEN 1
WHEN @a > 3 THEN 2
END
我想写成:
DECLARE @a INT
SET @a = 0
SELECT CASE @a
WHEN < 3 THEN 0
WHEN 3 THEN 1
WHEN > 3 THEN 2
END
...但是 SQL 不允许我以这种方式使用 符号。有没有办法可以做到这一点是 SQL 2005,还是我需要像第一个那样使用代码。
只需要代码一次的原因是因为它会使代码更具可读性/可维护性,还因为我不确定 SQL 服务器是否必须为每个 CASE 语句运行计算。
我正在寻找等效的 VB.NET 案例语句:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
也许这在 SQL 中是不可能的,没关系,我只是想确认一下。
【问题讨论】:
-
CASE在大多数其他编程语言中的工作方式与 CASE 或 SWITCH 类似。我看不出你的需要。 -
对不起,我的问题结束了。如果您仍然不明白我想要实现的目标,请告诉我
-
CASE 表达式只会在其中一个为真之前短路和评估案例。我认为另一种方法没有任何优势。
-
我知道它只会选择第一个评估为 true 的案例,我的问题是我希望它根据小于或大于符号评估 true,而不是评估等于具体值。在这个例子中,写 WHEN @a
-
正如我多次提到的,我的代码并不像@a 那样简单,它实际上是一个复杂的方程:(((Col1 * Col2) + col3-col2)/col4)。这需要为每一行计算。我同意第一个语句完美运行,但是当您添加实际列名的长度时,它变得难以阅读
标签: sql sql-server sql-server-2005 tsql