TSQL JOIN Разъяснение - PullRequest
       1

TSQL JOIN Разъяснение

1 голос
/ 20 сентября 2010

Предположим, у меня есть две таблицы

declare @emp table
(
  EmpID int,
  EmpName varchar(10)

)

declare @Remu table
(
   EmpID int,
   Sal Decimal(10,2),
   PaidYear varchar(10)
)

Я хочу, чтобы максимальная зарплата сгруппировалась по PaidYear (с галстуками)

Ожидаемый ВЫХОД

EmpID EmpName PaidYear Sal 
1     Jon     2001     2000
2     Smith   2001     2000

3     Nash   2003      4000     
4     Hoge   2005      5000
5     Peter  2005      5000

У меня проблема при использовании Join

select e.EmpID,e.EmpName,r.Sal,r.PaidYear from @emp e
inner join
(select max(Sal) as Sal,PaidYear from @Remu group by PaidYear)r
on e.EmpID=???

, когда я выбираю EmpID в

select max(Sal) as Sal,PaidYear from @Remu group by PaidYear

, мне нужно сгруппировать по PaidYear и EmpID, что не даст желаемого результата, так как яожидается.

Как решить эту проблему. Я хочу запрос, который должен быть совместим с SQL Server 2000.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010
select e.EmpID,e.EmpName,r.Sal,r.PaidYear
from @emp e inner join @Remu r on e.EmpId = r.EmpId
where r.sal in (select max(sal) from @remu group by paidyear)
0 голосов
/ 20 сентября 2010

Каждый год необходимо определить единую максимальную зарплату, специфичную для этого года.

select e.EmpID
    , e.EmpName
    , r.Sal
    , r.PaidYear 
from @emp as e 
inner join @Remu as r 
on e.EmpId = r.EmpId 
where r.sal = (select max(sal) 
               from @remu 
               where paidyear = r.PaidYear ' makes it year specific
              ) 

Данные для тестирования:

declare @emp table 
( 
  EmpID int, 
  EmpName varchar(10) 

) 

declare @Remu table 
( 
   EmpID int, 
   Sal Decimal(10,2), 
   PaidYear varchar(10) 
) 

insert into @emp (EmpID, EmpName)
values(1, 'Jon')
insert into @emp (EmpID, EmpName)
values(2, 'Smith')
insert into @emp (EmpID, EmpName)
values(3, 'Nash')
insert into @emp (EmpID, EmpName)
values(4, 'Hoge')
insert into @emp (EmpID, EmpName)
values(5, 'Peter')

Insert into @Remu (EmpID, Sal, PaidYear)
values(1, 2000, '2001')

Insert into @Remu (EmpID, Sal, PaidYear)
values(2, 4999, '2001') 

Insert into @Remu (EmpID, Sal, PaidYear)
values(2, 8000, '2003') 

Insert into @Remu (EmpID, Sal, PaidYear)
values(3,4000, '2003')      

Insert into @Remu (EmpID, Sal, PaidYear)
values(4, 5000, '2005')      

Insert into @Remu (EmpID, Sal, PaidYear)
values(5, 4999, '2005')

Результаты:

EmpID   EmpName Sal    PaidYear
4           Hoge    5000.00    2005
2           Smith   8000.00    2003
2           Smith   4999.00    2001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...