Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна помощь с задачей  [new]
krayshon
Member

Откуда:
Сообщений: 12
Для каждого месяца найти сотрудников с наивысшей премией, если премия за 1 месяц у нескольких сотрудников оказалась одинаковая, выбрать всех таких сотрудников.

Есть 2 варианта, но они оба не полностью решают задачу, нужна помощь.
SELECT month,name, prem from t2, t1
where prem in (select max(prem) from t1) and t2.id = t1.Id_emp

данный вариант выводит только 1 сотрудника с макс премией за все месяцы.
SELECT month,name,MAX(prem) over(partition by month ) as Max_Prem from t1, t2
where t2.id = t1.Id_emp

данный вариант выводит максимальную премию за месяц и присваивает ее всем строкам в этом месяце и так с каждым.
20 ноя 19, 15:32    [22020828]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с задачей  [new]
londinium
Member

Откуда: Киев
Сообщений: 1121
покажите, пожалуйста, примеры таблиц с данными
20 ноя 19, 15:38    [22020847]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с задачей  [new]
krayshon
Member

Откуда:
Сообщений: 12
londinium
покажите, пожалуйста, примеры таблиц с данными

t2:
-id
-name

t1:
-id_emp (внешний ключ таблицы t2)
-month
-prem
20 ноя 19, 15:41    [22020852]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с задачей  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1150
krayshon,

SELECT TOP (1) WITH TIES
[month],name, prem 
FROM t2 INNER join t1 ON t2.id_emp = t1.id
ORDER BY rank() OVER (PARTITION BY [MONTH] ORDER BY prem DESC)
20 ноя 19, 15:51    [22020871]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с задачей  [new]
londinium
Member

Откуда: Киев
Сообщений: 1121
автор
-id_emp (внешний ключ таблицы t2)
-month
-prem

попробуйте что-тов таком духе
WITH CTE AS
(
  SELECT T.ID_EMP,T.MONTH,T.PREM,
  RANK()OVER(PARTITION BY T.MONTH ORDER BY T.PREM DESC)AS XCOL
  FROM T1 AS T
)
SELECT C.ID,C.MONTH,C.PREM
FROM CTE AS C
WHERE C.XCOL=1
20 ноя 19, 15:53    [22020875]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь с задачей  [new]
krayshon
Member

Откуда:
Сообщений: 12
Minamoto
krayshon,

SELECT TOP (1) WITH TIES
[month],name, prem 
FROM t2 INNER join t1 ON t2.id_emp = t1.id
ORDER BY rank() OVER (PARTITION BY [MONTH] ORDER BY prem DESC)

благодарю
20 ноя 19, 15:54    [22020877]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить