求SQL:应该是循环语句吧

HuoLarry 2014-02-13 11:58:23
表:T

ID,AMOUNT
1,1000
2,1500
3,500

需要得到的结果,LEVEL是衍生出来的列:

ID,AMOUNT,LEVEL
1,1000,消费1000以上
2,1500,消费1000以上
3,500,消费500以内

(注:实际情况比这个复杂一些,AMOUNT有10个档次,ID有10W行)
我写的case when好像不管用,可能写错了,就不在这里贴出来了。感谢各位的协助!!!
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2014-02-13
  • 打赏
  • 举报
回复
大概就是这样,另外,最好是有具体的大小范围,比如大于多少,小于多少,是“消费1000以上”:

--drop table t

create table t(ID int,AMOUNT int)

insert into t
select 1,1000 union all
select 2,1500 union all
select 3,500
go


select *,
       case when amount <= 500  then '消费500以内'
            when AMOUNT >= 1000 then '消费1000以上'
       end LEVEL
from t

/*
ID	AMOUNT	LEVEL
1	1000	消费1000以上
2	1500	消费1000以上
3	500	消费500以内
*/
發糞塗牆 2014-02-13
  • 打赏
  • 举报
回复
字典表存放level的描述,然后amount的起始值、结束值,用between and 来匹配你原有的表,这样还有另外一个好处,如果以后level的区间改动,不需要再改原有代码,直接改字典表的区间即可
發糞塗牆 2014-02-13
  • 打赏
  • 举报
回复
要么就用10个case when,不过写的很累赘,你可以考虑间隔字典表,存放amount的范围值,然后join这个表
HuoLarry 2014-02-13
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
字典表存放level的描述,然后amount的起始值、结束值,用between and 来匹配你原有的表,这样还有另外一个好处,如果以后level的区间改动,不需要再改原有代码,直接改字典表的区间即可
用case when已经搞定,因为我的Level是固定的区间,不过如果经常变化可以考虑这样的方法,感激。
treemo 2014-02-13
  • 打赏
  • 举报
回复
KeepSayingNo 2014-02-13
  • 打赏
  • 举报
回复
你这个用case when是最好的,用字典表还不适合,因为你条件是那种范围条件

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧