gpt4 book ai didi

SQL 'CASE WHEN x' 与 'CASE x WHEN' 大于条件?

转载 作者:行者123 更新时间:2023-12-04 00:40:40 26 4
gpt4 key购买 nike

这是一道关于在MS SQL [CASE WHEN X = Y]和[CASE X WHEN Y]中使用SELECT CASE的两种方式的问题

我正在尝试根据其值为字段定义存储桶。我需要使用范围,因此有必要使用“<”或“>”标识符。

作为一个简单的例子,我知道它是这样工作的:

SELECT CASE WHEN x < 0 THEN 'a' WHEN X > 100 THEN 'b' ELSE 'c' END

现在我必须写很多这样的东西,会有超过 3 个桶,字段名称很长,所以这变得很难保持清晰和易于理解。我希望使用 select 命令的另一种方式,但对我来说,我似乎只能将它与 equals 一起使用:

SELECT CASE X WHEN 0 then 'y' ELSE 'z' END

但是我怎样才能像上面那样使用这种形式来指定范围条件呢?像这样的东西:

SELECT CASE X WHEN < 0 THEN 'a' WHEN > 100 THEN 'b' ELSE "c" END

这个不行。

谢谢!

最佳答案

作为替代方法,请记住可以对“简单”CASE 语句的输入值进行数学运算。为此,我经常使用 ROUND,如下所示:

SELECT 
CASE ROUND(X, -2, 1)
WHEN 0 THEN 'b' -- 0-99
WHEN 100 THEN 'c' -- 100-199
ELSE 'a' -- 200+
END

由于您的示例包括正负开放范围,因此这种方法可能不适合您。

还有另一种方法:如果您只考虑 SELECT 语句的可读性,您可以编写一个标量值函数来隐藏所有困惑情况:

CREATE FUNCTION dbo.ufn_SortValuesIntoBuckets (@inputValue INT) RETURNS VARCHAR(10) AS
BEGIN
DECLARE @outputValue VARCHAR(10);

SELECT @outputValue =
CASE WHEN @inputValue < 0 THEN 'a'
WHEN @inputValue BETWEEN 0 AND 100 THEN 'b'
WHEN @inputValue > 100 THEN 'c'
END;

RETURN @outputValue;
END;
GO

所以现在您的 SELECT 语句只是:

SELECT dbo.ufn_SortValuesIntoBuckets(X); 

最后一个考虑因素:我经常发现,在基准测试期间,“搜索”形式(您试图避免)实际上比“简单”形式具有更好的性能,具体取决于您有多少 CASE。因此,如果性能是一个考虑因素,那么在你改变太多之前做一些基准测试可能是值得的。

关于SQL 'CASE WHEN x' 与 'CASE x WHEN' 大于条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com