我有这个查询
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
感谢
答案 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关键字)。