我正在尝试使用IN为类别选择不同范围的数据,但不太确定语法 例如:类别的编号为1,3,4,然后是20到30,然后是100到110
我使用语法
Case category =
When categoryId IN (1,3,4, [20-30],[100-110] Then 'Running'
但是我收到了语法错误。我该怎么做?
答案 0 :(得分:1)
您可以使用
SELECT
CASE
WHEN EXISTS (SELECT *
FROM (VALUES(1,1),
(3,4),
(20,30),
(100,110)) Ranges(Low, High)
WHERE categoryId BETWEEN Low AND High) THEN 'Running'
END
FROM YourTable
答案 1 :(得分:0)
CASE
WHEN categoryId IN (1,3,4) OR
(categoryId >= 20 AND categoryId <= 30) OR
(categoryId >= 100 AND categoryId <= 110)
THEN 'Running'
END
答案 2 :(得分:0)
你可以像往常一样编写一个简单的标量函数。
CREATE FUNCTION [dbo].[Categoory_Range] (@CategoryID as bigInt)
RETURNS bit AS
BEGIN
Declare @result as bit = 0
-- Need to tack a delimiter onto the end of the input string if one doesn't exist
if(@CategoryID <= 4 and @CategoryID > 0)
begin
set @result = 1
end
else if(@CategoryID >20 and @CategoryID <= 30)
begin
set @result =1
end
else if(@CategoryID > 100 and @CategoryID <= 110)
begin
set @result = 1
end
else
begin
set @result= 0
end
return @result
END
您想要使用的时间和地点
Select
Case WHEN [Categoory_Range](CategoryID) > 0 Then 'Running' ELSE 'Whatever' END FROM MyTable.
我喜欢使用这些功能,因为你不必一直重写这些功能。我通常用功能来做。检查上面的功能虽然没有测试。希望能帮助到你。但是,如果你只想写一次,你可以只想写一次,你可以在查询中做。
答案 3 :(得分:0)
你可以试试这个:
CASE
WHEN CategoryId in (1,3,4) or
(CategoryId between 20 and 30) or
(CategoryId between 100 and 110) THEN 'Running'
END