Potrzebuję znaleźć 3rd maximum salary
dla pracownika dla każdego działu w table
. jeśli nie istnieje 3rd maximum salary
, to wyświetl numer 2nd maximum salary
. jeśli nie istnieje 2nd maximum salary
, znajdź highest salary
. Jak osiągnąć ten wynik w sql-server
?Znajdź 3 najwyższe wynagrodzenie dla każdego działu na podstawie danych tabeli
Struktura table
podano poniżej
create table employee1(empid int, empname varchar(10), deptid int, salary money)
insert into employee1
select 1,'a',1, 1000
union
select 1,'b',1, 1200
union
select 1,'c',1, 1500
union
select 1,'c',1, 15700
union
select 1,'d',2, 1000
union
select 1,'e',2, 1200
union
select 1,'g',3, 1500
Próbowałem wspólny sposób na uzyskanie maksymalnego wynagrodzenia dla poszczególnych kategorii przy użyciu row_number
funkcję.
;with cte
as
(
select ROW_NUMBER() over(partition by deptid order by salary) as id, * from employee1
)
select * from cte
Co jeśli istnieją więzi? Czy chcesz obie rekordy wiążące? A w takim razie, co jeśli 1 osoba ma najwyższą pensję, a 2 osoby są związane na sekundę, czy chcesz 3. najwyższą pensję (4 osoba) lub jedną z drugich? – Matt
yeah..i zmieniłaby wartość row_number na dense_rank, aby adresować krawaty. – bmsqldev
Uaktualniłem odpowiedź za pomocą więzów, których potrzebujesz po prostu zastąpić number_wiersza() dense_rank() – Matt