Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 подмогите с запросом!!  [new]
ElenaV
Guest
Есть база данных о работниках предприятия (Access). Нужно написать запрос, который выдавал бы всех сотрудников наивысшей квалификации, имеющих максимальную суммарную годовую зарплату в течение послежних N лет (N - параметр внешнего запроса). Инфа о сотрудниках содержится в таблице Т_Работник, о зарплате - Т_Зарплата. У меня проблема с выделением максимума - не работает ф-ция Max\Min. Пробовала сделать сортировку и выбрать First или Last -тоже не катит.
Вот это все, что мне удается получить

SELECT Т_Работник.Квалификация, Т_Работник.Фамилия, Sum(Т_Зарплата.Выдано) AS [Sum_Выдано]
FROM Т_Работник INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
where Т_Работник.Квалификация="Разряд ?20"
GROUP BY Т_Работник.Квалификация, Т_Работник.Фамилия;

Может есть какие-то мысли?
9 янв 07, 11:16    [3615129]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
Да, забыла. Когда пытаюсь вставить вложенный подзапрос - тож какая-то ерунда :(
9 янв 07, 11:17    [3615141]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
Покажите ваш вариант с вложенным подзапросом.
9 янв 07, 11:33    [3615282]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
Я его убила :( точнее их...
суть: выбрать того работника, у которого сумма зарплаты больше всех остальных с использованием ф-ции ALL
9 янв 07, 11:38    [3615314]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
SELECT Т_Работник.Фамилия, Т_Работник.Квалификация, Sum(Т_Зарплата.Выдано) AS [Sum_Выдано]
FROM Т_Работник INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
GROUP BY Т_Работник.Фамилия, Т_Работник.Квалификация
where Т_Работник.Квалификация="Разряд №20" AND Sum(Т_Зарплата.Выдано)>=ALL (SELECT Sum(Т_Зарплата.Выдано) FROM Т_Зарплата);

на такое говорит ошибка синтаксиса
9 янв 07, 11:43    [3615352]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
я поняла свою ошибку в предыдущем варианте!!!
дальше все равно не поняла :(...
9 янв 07, 11:44    [3615365]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ы
Guest
SELECT t1.Квалификация, t1.Фамилия, max(Sum_Выдано) as max_Выдано
from
(SELECT Т_Работник.Квалификация, Т_Работник.Фамилия, Sum(Т_Зарплата.Выдано) AS [Sum_Выдано]
FROM Т_Работник INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
where Т_Работник.Квалификация="Разряд ?20"
GROUP BY Т_Работник.Квалификация, Т_Работник.Фамилия;) as t1
group by t1.Квалификация, t1.Фамилия

?
9 янв 07, 11:46    [3615380]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
George-III
Member

Откуда:
Сообщений: 3689
ElenaV
Я его убила :( точнее их...
суть: выбрать того работника, у которого сумма зарплаты больше всех остальных с использованием ф-ции ALL


SELECT Т_Работник.Фамилия,Max([Sum_Выдано]) FROM (SELECT Т_Работник.Квалификация, Т_Работник.Фамилия, Sum(Т_Зарплата.Выдано) AS [Sum_Выдано]
FROM Т_Работник INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
where Т_Работник.Квалификация="Разряд ?20"
GROUP BY Т_Работник.Квалификация, Т_Работник.Фамилия)
GROUP BY Т_Работник.Фамилия;
Не проверял
???
9 янв 07, 11:54    [3615427]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
Низко кланяюсь :)
а как бы еще заставить его считать зарплату за N лет? куда лепить этот внешний запрос и как его считать?
PS я сильно туплю с предметом Базы Данных :)
9 янв 07, 11:54    [3615432]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ElenaV
Guest
предполагаю, что использовать надо Year(date())
но КАК?
в смысле, как растолковать запросу, что он должен посчитать зарплату за последние, скажем, 3 года, если на дворе 2007 от Р.Х.? :)
9 янв 07, 11:57    [3615448]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
ElenaV
предполагаю, что использовать надо Year(date())
но КАК?
в смысле, как растолковать запросу, что он должен посчитать зарплату за последние, скажем, 3 года, если на дворе 2007 от Р.Х.? :)

Where Year([ПолеДаты])>Year(date())-3
9 янв 07, 12:01    [3615479]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
UmaThurman
Member

Откуда:
Сообщений: 10
Это все еще я, только зарегистрировалась. Сделала вот так

SELECT t1.Квалификация, t1.Фамилия, Т_Зарплата.Год, Max(t1.SUMMA) AS MaxSum
FROM [SELECT Т_Работник.Квалификация, Т_Работник.Фамилия, Sum(Т_Зарплата.Выдано) AS SUMMA
FROM Т_Работник INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
where Т_Работник.Квалификация="Разряд №20"
GROUP BY Т_Работник.Квалификация, Т_Работник.Фамилия]. AS t1, Т_Зарплата
WHERE ((Т_Зарплата.Год)>Year(2007)-[ПолеДаты])
GROUP BY t1.Квалификация, t1.Фамилия, Т_Зарплата.Год;

и получается вот что

Квалификация Фамилия Год MaxSum
Разряд №20 Жуков 2004 6748
Разряд №20 Жуков 2005 6748
Разряд №20 Жуков 2006 6748
Разряд №20 Петров 2004 5975
Разряд №20 Петров 2005 5975
Разряд №20 Петров 2006 5975
Разряд №20 Шадрина 2004 6800
Разряд №20 Шадрина 2005 6800
Разряд №20 Шадрина 2006 6800

независимо от того, что вводить в поле даты :(

мне надо ввести, предположим, 4 года и чтобы он понял, что надо суммировать зарплату с 2003г
9 янв 07, 13:18    [3615974]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
автор
WHERE ((Т_Зарплата.Год)>Year(2007)-[ПолеДаты])
Это совершенно неправильно. Если есть отдельное поле для года ((Т_Зарплата.Год)), надо не так
WHERE ((Т_Зарплата.Год)>Year(Date)-3) ' Или сколько там надо
9 янв 07, 13:37    [3616128]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
UmaThurman
Member

Откуда:
Сообщений: 10
mds_world
автор
WHERE ((Т_Зарплата.Год)>Year(2007)-[ПолеДаты])
Это совершенно неправильно. Если есть отдельное поле для года ((Т_Зарплата.Год)), надо не так
WHERE ((Т_Зарплата.Год)>Year(Date)-3) ' Или сколько там надо


чесно говоря разницы не вижу между этими вариантами

мне надо чтобы 3 не SQL-коде было, а руками пользователя вводилось в окошечке "введите плиз за скока лет вам посчитать зарплату"
9 янв 07, 14:51    [3616704]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
автор
мне надо чтобы 3 не SQL-коде было, а руками пользователя вводилось в окошечке "введите плиз за скока лет вам посчитать зарплату"
Есть!
WHERE ((Т_Зарплата.Год)>Year(Date)-Forms![ПолеГода])
9 янв 07, 15:31    [3616960]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
UmaThurman
Member

Откуда:
Сообщений: 10
на такое вообще пустые столбцы выдает :(
посидела-подумала-поломала БД.....
кстати, мне как результат выдаются три фамилии, а надо одну (максимальную зарплату имеющую) :(
9 янв 07, 15:50    [3617076]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
SBL
Member

Откуда: Tallinn
Сообщений: 666
UmaThurman
на такое вообще пустые столбцы выдает :(
посидела-подумала-поломала БД.....
кстати, мне как результат выдаются три фамилии, а надо одну (максимальную зарплату имеющую) :(


Select TOP 1 ...

order by SUMMA Desc;?
9 янв 07, 16:57    [3617521]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
UmaThurman
Member

Откуда:
Сообщений: 10
SBL
UmaThurman
на такое вообще пустые столбцы выдает :(
посидела-подумала-поломала БД.....
кстати, мне как результат выдаются три фамилии, а надо одну (максимальную зарплату имеющую) :(


Select TOP 1 ...

order by SUMMA Desc;?


насчет order by ругается, говорит что конфликтует с distinct
пробовала уже и select first & order by... desc :(
9 янв 07, 18:28    [3618127]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
ыпа
Guest
UmaThurman
............

насчет order by ругается, говорит что конфликтует с distinct
........(

Речь идет про Аксесс? Если да, то не должен. Может быть, приведете точное описание ошибки?
И если нужно максимальное значение, почему не воспользоваться агрегатной функцией Sum + Group By?
10 янв 07, 10:01    [3619416]     Ответить | Цитировать Сообщить модератору
 Re: подмогите с запросом!!  [new]
UmaThurman
Member

Откуда:
Сообщений: 10
ыпа
UmaThurman
............

насчет order by ругается, говорит что конфликтует с distinct
........(

Речь идет про Аксесс? Если да, то не должен. Может быть, приведете точное описание ошибки?
И если нужно максимальное значение, почему не воспользоваться агрегатной функцией Sum + Group By?


точное описание - так и говорит, order by конфликтует с distinct
Использую Sum и Group by. А дальше-то что? мне максимум из трех сумм надо выбрать. пользуюсь предложенными решениями, вкладываю запросы. суммирование получается, а максимум не выдает.
я правильно понимаю суть функции максимум? одно значение возвращается?
10 янв 07, 13:10    [3620851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить