在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中我该怎么办?
答案 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