不包括特定数字的数字范围的案例 - SQL Server

时间:2017-11-06 11:54:02

标签: sql sql-server case

我有这个查询

SELECT * ,
CASE WHEN FigureID >= 0 AND <= 10 AND <> 5
THEN 'Group1' ELSE 'Group2' END AS 'Group'
FROM
Figure

现在我希望在案例陈述中包括1-10之间的所有数字但排除5.无论如何都要这样做,以便&#39; 5&#39;被排除在外。

我试过了,但它仍然没有给我我想要的结果。

 SELECT * ,
 CASE WHEN FigureID <= 4 AND FigureID >= 6
 THEN 'Group1' ELSE 'Group2' END AS 'Group'
 FROM
 Figure

示例结果

FigureID    Amount  Group
   1          10    Group1
   2          10    Group1
   3          10    Group1
   4          10    Group1
   5          10    N/a
   6          10    Group1

SQL小提琴 - http://sqlfiddle.com/#!6/30e2c/11

感谢

4 个答案:

答案 0 :(得分:2)

您应该为每个条件使用列名

    SELECT * ,
        CASE WHEN FigureID >= 0 AND FigureID <= 10 AND FigureID <> 5
             THEN 'Group1' 
             ELSE 'Group2' 
        END AS 'Group'
    FROM  Figure

答案 1 :(得分:1)

    SELECT * ,
    CASE WHEN (FigureID >= 1 AND FigureID <= 10) AND (FigureID <> 5)
    THEN 'Group1'
    WHEN FigureID = 5 THEN 'N/A' 
    ELSE 'Group2'
    END AS [Group]
    FROM Figure

首先CASE负责处理图形ID介于1和10之间但不等于5且输出为&#39; Group1&#39;。

第二个CASE解决了FigureID的值为5并输出N / A&#39;

的情况

ELSE子句是指如果上述两个条件为假并输出&#39; Group2&#39;。

最后,此列的名称是Group,但由于Group是关键字,因此我们必须将其括在[Group]等方括号中。

答案 2 :(得分:0)

使用不等于5而不是

SELECT * ,
 CASE WHEN FigureID <> 5
 THEN 'Group1' 
when FigureID  =5
then 'n/a'
ELSE 'Group2' END AS 'Group'
 FROM
 Figure

答案 3 :(得分:0)

一种方法是:

(CASE WHEN FigureID >= 1 AND FigureID <= 10 AND FigureId <> 5
      THEN 'Group1'
      ELSE 'Group2'
 END) AS grp

你也可以这样做:

(CASE WHEN FigureId = 5 THEN 'N/A'
      WHEN FigureID >= 1 AND FigureID <= 10 THEN 'Group1'
      ELSE 'Group2'
 END) AS grp

同样重要的是:不要使用单引号作为列别名。仅对字符串和日期常量使用单引号。另外,避免使用SQL关键字作为标识符名称(GROUP是SQL关键字)。