SQL Server - Case语句

20

我几乎可以确定你无法在case语句的上下文中完成这个操作,我也找不到任何相关文档,但是是否有可能执行以下操作:

SELECT CASE WHEN testValue > 2 
THEN testValue(Without Repeating it) ELSE FailValue)
END 
FROM Table 

更好、更详细的例子:

Select CASE WHEN (Foo-stuff+bar) > 2 
THEN Conditional statement without >2 Else "Fail"
END 
FROM TABLE

我正在寻找一种方法来创建一个选择器,而不需要重复条件查询。

编辑:由于我之前的示例不够清晰,并且没有得到我想要的答案:

testValue = (Table.A / Table.B) * Table.C Table.D

SELECT CASE WHEN testValue > 2 
THEN testValue ELSE FailValue)
END 
FROM Table 

我对涉及变量的答案感到困惑,因为如果计算涉及列,我不明白将其放入变量中如何有助于解决问题。你的 testValueFoo-stuff+bar 查询实际上是查询某个列吗? - Tim Lehner
IT是几列的组合。我们假设我是亚马逊,我正在以100美元(价格)出售某物。在我的州,有7%(税)的销售税,运费为10美元(ShipPrice)。因此,它将类似于SELECT CASE WHEN (price*(tax/100)+ShipPrice>10 THEN (price*(tax/100)+ShipPrice ELSE 0 END - Elias
1
@Elias 我误解了你问题的重点。我已经在我的答案中添加了第二部分。 - UnhandledExcepSean
4个回答

20

Like so

DECLARE @t INT=1

SELECT CASE
            WHEN @t>0 THEN
                CASE
                    WHEN @t=1 THEN 'one'
                    ELSE 'not one'
                END
            ELSE 'less than one'
        END

编辑: 在更仔细地查看问题后,我认为最好的选择是创建一个计算值的函数。这样,如果你最终有多个需要执行计算的地方,你只需要维护逻辑的一个点。


我曾考虑过这样做,但进展并不如我所愿,无论如何还是点赞! - Elias
1
对于这个例子,您不需要嵌套的 case 语句。 - Kaf

19
查询可以稍微简单些,像这样写就好了:
DECLARE @T INT = 2 

SELECT CASE 
         WHEN @T < 1 THEN 'less than one' 
         WHEN @T = 1 THEN 'one' 
         ELSE 'greater than one' 
       END T

1
我修改了你的答案,使输出字符串更加合乎逻辑和有意义。 - Kaf

2

我正在寻找一种不需要重复条件查询就能创建下拉列表的方法。

我猜你不想重复 Foo-stuff+bar。你可以把计算放在派生表中:

SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END 
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a

一个常见的表达式同样可以起到作用:

WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END    
FROM a

另外,你的 switch 的每个部分应该返回相同的数据类型,因此你可能需要强制转换一个或多个 case。


0
我们可以像这样使用case语句。
select Name,EmailId,gender=case 
when gender='M' then 'F'
when gender='F' then 'M'
end
 from [dbo].[Employees]

我们也可以这样做。
select Name,EmailId,case gender
when 'M' then 'F'
when 'F' then 'M'
end
 from [dbo].[Employees]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接