varchar

时间:2015-09-11 09:58:08

标签: sql-server

在sql server中,我有一个就业表

name, pay_grade
 A      MA
 A      DV
 A      BB
 A      GC

一个人可能有多个工作,但我只对pay_grade最高的人感兴趣,以获得单行

问题是pay_grade被命令为desc as(MA,BB,GC,DV)我不能对它们做MAX()

在Java中我可以定义一个Map,然后放一个订单行(1,MM) (2,BB)

但是在sql中我该怎么办?

3 个答案:

答案 0 :(得分:0)

您在降序中使用成绩。如果是这样,那么您可以使用限制和订单,如下所示

select TOP(1) * from employmenttable where name = 'name' order by pay_grade ASC

答案 1 :(得分:0)

您需要一个表格来定义每个pay_grade的单个值。然后,您可以从该新表中获得最高费率,并将该名称加入您的数据。

select * from YourTable 
 where pay_grade = (
        select pay_grade 
          from NEWTABLE 
         where pay_grade_rate = (select max(pay_grade_rate) from NEWTABLE))

答案 2 :(得分:0)

您可以为下面的薪资等级创建一个查找表,然后将其用于JOIN

CREATE TABLE #pay_ranks
    (
      pay_grade VARCHAR(2) ,
      pay_rank INT
    )

INSERT  INTO #pay_ranks
        ( pay_grade, pay_rank )
VALUES  ( 'MA', 1 ),
        ( 'BB', 2 ),
        ( 'GC', 3 )

然后返回数据可以通过多种方式完成,这里是一个:

CREATE TABLE #employee
    (
      name VARCHAR(5) ,
      pay_grade VARCHAR(2)
    )

INSERT  INTO #employee
        ( name, pay_grade )
VALUES  ( 'A', 'MA' ),
        ( 'A', 'BB' ),
        ( 'A', 'GC' )

SELECT  e.name ,
        pr.pay_grade ,
        pr.pay_rank
FROM    #employee e
        INNER JOIN ( SELECT TOP 1
                            pay_grade ,
                            pay_rank
                     FROM   #pay_ranks
                     ORDER BY pay_rank
                   ) pr ON pr.pay_grade = e.pay_grade


DROP TABLE #employee
DROP TABLE #pay_ranks

<强>输出

name    pay_grade   pay_rank
A       MA          1