select case when 积分 > 500 then '白银会员' when 积分 >= 120 and 积分 <= 500 then '青铜会员' when 积分 >= 50 and 积分 <= 120 then '普通会员' end as 会员类型 from tb这是我写的,至于具体的临界值,你自己写.
叫你老师来CSDN跟老乌龟学学吧.
比如,会员类型如下 类型名 下限 普通会员 0 青铜会员 100 白银会员 500 select [会员类型] = (select top 1 普通会员 from 会员类型表 where 下限 < a.积分 order by 下限 asc) ,* from tb a
set nocount on declare @会员 table (ID int,姓名 varchar(10),积分 int) declare @会员类型 table(类型名 varchar(10),下限 int) insert @会员类型 select '普通会员', 0 union select '青铜会员', 100 union select '白银会员', 500 union select '黄金会员', 10000 insert @会员 select 1,'张三',100 insert @会员 select 1,'李四',500 insert @会员 select 1,'王五',300 insert @会员 select 1,'刘六',10 insert @会员 select 1,'胡大',100select * from @会员 /* ID 姓名 积分 ----------- ---------- ----------- 1 张三 100 1 李四 500 1 王五 300 1 刘六 10 1 胡大 100 */ select [会员类型] = (select top 1 类型名 from @会员类型 where 下限 > a.积分 order by 下限 asc) ,* from @会员 a /*会员类型 ID 姓名 积分 ---------- ----------- ---------- ----------- 白银会员 1 张三 100 黄金会员 1 李四 500 白银会员 1 王五 300 青铜会员 1 刘六 10 白银会员 1 胡大 100 */
借用无枪的狙击手的数据..declare @会员 table (ID int,姓名 varchar(10),积分 int) declare @会员类型 table(类型名 varchar(10),下限 int) insert @会员类型 select '普通会员', 0 union select '青铜会员', 100 union select '白银会员', 500 union select '黄金会员', 10000 insert @会员 select 1,'张三',100 insert @会员 select 2,'李四',500 insert @会员 select 3,'王五',30000 insert @会员 select 4,'刘六',10 insert @会员 select 5,'胡大',100select b.id,b.姓名,b.积分,isnull(a.类型名,'黄金会员') 类型名 from @会员 b left join ( select 类型名,下限,上限=(select min(下限) from @会员类型 where 下限>a.下限)-1 from @会员类型 a ) a on b.积分>=a.下限 and b.积分<a.上限 order by b.id /* id 姓名 积分 类型名 ----------- ---------- ----------- ---------- 1 张三 100 青铜会员 2 李四 500 白银会员 3 王五 30000 黄金会员 4 刘六 10 普通会员 5 胡大 100 青铜会员(所影响的行数为 5 行) */
叫你老师来CSDN跟无枪的狙击手学学吧.
谢谢,根据你们的算法,我想到了更好的解决办法select id, 姓名,性别,积分, 类型名, 折扣, 备注 from 会员类型 t join (SELECT c.*,(select max(下限) from 会员类型 where c.积分 >= 下限) a from 会员 c )table1 on t.下限 = table1.a这样就不需要有最高的上限了 十分感谢
case when 积分 > 500 then '白银会员'
when 积分 >= 120 and 积分 <= 500 then '青铜会员'
when 积分 >= 50 and 积分 <= 120 then '普通会员'
end as 会员类型
from tb这是我写的,至于具体的临界值,你自己写.
类型名 下限
普通会员 0
青铜会员 100
白银会员 500
select [会员类型] = (select top 1 普通会员 from 会员类型表 where 下限 < a.积分 order by 下限 asc)
,*
from tb a
declare @会员 table (ID int,姓名 varchar(10),积分 int)
declare @会员类型 table(类型名 varchar(10),下限 int)
insert @会员类型 select
'普通会员', 0 union select
'青铜会员', 100 union select
'白银会员', 500 union select
'黄金会员', 10000
insert @会员 select 1,'张三',100
insert @会员 select 1,'李四',500
insert @会员 select 1,'王五',300
insert @会员 select 1,'刘六',10
insert @会员 select 1,'胡大',100select * from @会员
/*
ID 姓名 积分
----------- ---------- -----------
1 张三 100
1 李四 500
1 王五 300
1 刘六 10
1 胡大 100
*/
select [会员类型] = (select top 1 类型名 from @会员类型 where 下限 > a.积分 order by 下限 asc)
,*
from @会员 a
/*会员类型 ID 姓名 积分
---------- ----------- ---------- -----------
白银会员 1 张三 100
黄金会员 1 李四 500
白银会员 1 王五 300
青铜会员 1 刘六 10
白银会员 1 胡大 100
*/
declare @会员类型 table(类型名 varchar(10),下限 int)
insert @会员类型 select
'普通会员', 0 union select
'青铜会员', 100 union select
'白银会员', 500 union select
'黄金会员', 10000
insert @会员 select 1,'张三',100
insert @会员 select 2,'李四',500
insert @会员 select 3,'王五',30000
insert @会员 select 4,'刘六',10
insert @会员 select 5,'胡大',100select b.id,b.姓名,b.积分,isnull(a.类型名,'黄金会员') 类型名
from @会员 b
left join
(
select 类型名,下限,上限=(select min(下限) from @会员类型 where 下限>a.下限)-1
from @会员类型 a
) a
on b.积分>=a.下限 and b.积分<a.上限
order by b.id /*
id 姓名 积分 类型名
----------- ---------- ----------- ----------
1 张三 100 青铜会员
2 李四 500 白银会员
3 王五 30000 黄金会员
4 刘六 10 普通会员
5 胡大 100 青铜会员(所影响的行数为 5 行)
*/
from 会员类型 t join (SELECT c.*,(select max(下限) from 会员类型 where c.积分 >= 下限) a
from 会员 c
)table1
on t.下限 = table1.a这样就不需要有最高的上限了
十分感谢