我和他的同事一样,是第一次发布SQL的新海报
我有一列数字(让我们称之为“数字”),其中的值范围为1-9999
我需要创建一个分组列(让我们称之为“数字级别”)并将AA的值分配给1-999,BB从1000-6999和CC为7000-9999的所有数字。
因此,最终输出将如下所示(输出不需要订购):
numbers | numbers level
-------------------------------------
136 | AA
2935 | BB
4288 | BB
8987 | CC
436 | AA
3737 | BB
有没有简单的方法来编写脚本,即:使用GROUP BY子句?
或者该分组列是否已经存在,我需要用命令填充它?
如果我的问题充满了无知,请告诉我,我会尽力澄清。
答案 0 :(得分:9)
这对于case语句来说是最简单的(假设您正在使用sql-server;如果没有,请为正确的版本添加标签)。
Select [Numbers]
, case when [Numbers] between 1 and 999 then 'AA'
when [Numbers] between 1000 and 6999 then 'BB'
when [Numbers] between 7000 and 9999 then 'CC'
end as [Numbers Level]
from MyTable
如果您的任何数字不属于这些范围,它将返回NULL - 如果您希望在发生这种情况时获得不同的结果,请使用else
。
答案 1 :(得分:3)
分组列必须存在,但您可以改为使用case
。
select nr,
case when nr <= 999 then 'AA'
when nr <= 7000 then 'BB'
else 'CC'
end as NrLevel
from Numbers
答案 2 :(得分:1)
这里你真的不需要一个小组,你可以用一个简单的case语句来完成它。
SELECT number,
CASE WHEN number between 1 and 999 THEN 'AA'
WHEN number between 1000 and 6999 THEN 'BB'
WHEN number between 7000 and 9999 then 'CC'
END numbers_level
from Number_table