create table tempTable
(
position varchar(30),
area varchar(100) --工薪范围
)goinsert into tempTable values('员工','1000以下')
insert into tempTable values('组长','1000-3000')
insert into tempTable values('秘书','3000-5000')
insert into tempTable values('组长','1000-3000')
insert into tempTable values('厂长','10000以上')select * from tempTabledrop table tempTable
问题 :
工薪范围按升序排序,并用1,2,3,4...表示等级且如相同则用一个数表示如position area grade
-----------------------------------
员工 1000以下  1
组长 1000-3000 2
组长 1000-3000 2
秘书 3000-5000 3
厂长 10000以上 4

解决方案 »

  1.   

    表可以考虑这样来设计(参考)
    create table personSalary
    (
      _type varchar(20), 
      salarylowline smallint,
      salaryheightline smallint,
      level as (salarylowline+salaryheightline)/2/1000,
      constraint ck_type check(_type in('员工','组长','秘书','厂长'))
    )insert into dbo.personSalary
    values
    ('员工',0,1000),
    ('组长',1000,3000),
    ('秘书',3000,5000),
    ('厂长',10000,15000)select * from dbo.personSalary
    order by [level] asc
      

  2.   

    中间是有一个范围表,这个范围表是用户可以自己修改的 上面范围字符串是经函数反回的结果
    至于上面的结果是经处理简化而来的
    也可以简化处理create table tempTable 

    area varchar(100) --工薪范围 
    ) go insert into tempTable values('1000以下') 
    insert into tempTable values(,'1000-3000') 
    insert into tempTable values(,'3000-5000') 
    insert into tempTable values(,'1000-3000') 
    insert into tempTable values(,'10000以上') select * from tempTable drop table tempTable 
    问题 : 
    工薪范围按升序排序,并用1,2,3,4...表示等级且如相同则用一个数表示 如  area   grade 
    ----------------------------------- 
    1000以下    1 
    1000-3000  2 
    1000-3000  2 
    3000-5000  3 
    10000以上   4