Alesik
Дата: 10.11.2009 14:56:46
Помогите составить запрос на выборку, иначе сломаю свой мозг:
Таблица_1: код_отдела, наименование_отдела
Таблица_2: код_отдела, дата_рождения, оклад, образование, пол
Необходимо:
Наименование_отдела, кол-во мужчин, % мужчин до 30 лет, средний оклад мужчин, % мужчин с ВО, кол-во женщин, % женщин до 30 лет, средн. оклад женщин, % женщин с ВО
СПАСИБО ДАЖЕ ЗА ПОДСКАЗКУ
`
Дата: 10.11.2009 15:20:17
Alesik |
Помогите составить запрос на выборку, иначе сломаю свой мозг:
Таблица_1: код_отдела, наименование_отдела Таблица_2: код_отдела, дата_рождения, оклад, образование, пол
Необходимо: Наименование_отдела, кол-во мужчин, % мужчин до 30 лет, средний оклад мужчин, % мужчин с ВО, кол-во женщин, % женщин до 30 лет, средн. оклад женщин, % женщин с ВО
СПАСИБО ДАЖЕ ЗА ПОДСКАЗКУ |
если пол - логическое поле
SELECT t1.код_отдела, t1.наименование_отдела,
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True AND ((Year(Date()) - Year(t2.дата_рождения) < 30) OR (Year(Date()) - Year(t2.дата_рождения) = 30 AND DateSerial(Year(Date()), Month(t2.дата_рождения), Day(t2.дата_рождения)))))/(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT AVG(оклад) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True AND t2.образование='ВО')/(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True)
FROM Таблица_1 t1
для дамс - аналогично
зы
с этим - "% мужчин до 30 лет" - небольшая засада есть в виде 29 февраля - надо как-то обрабатывать
`
Дата: 10.11.2009 15:25:36
...немного не дописал
SELECT t1.код_отдела, t1.наименование_отдела,
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True AND ((Year(Date()) - Year(t2.дата_рождения) < 30) OR (Year(Date()) - Year(t2.дата_рождения) = 30 AND DateSerial(Year(Date()), Month(t2.дата_рождения), Day(t2.дата_рождения)) < Date())))/(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT AVG(оклад) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True),
(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True AND t2.образование='ВО')/(SELECT COUNT(*) FROM Таблица_2 t2 WHERE t1.код_отдела=t2.код_отдела AND пол=True)
FROM Таблица_1 t1
T_Alex_G
Дата: 10.11.2009 15:30:57
Так вроде короче
SELECT Sum(IIf(q.Age>30,1,0))/Count(q.ФИО)*100
FROM (SELECT DateDiff("yyyy",[дата_рождения],Date()) AS Age, ФИО
FROM Таблица_2
WHERE пол=True
) as q
надо только справочник отделов привязать
T_Alex_G
Дата: 10.11.2009 15:32:08
упс - ДО 30 лет
SELECT Sum(IIf(q.Age<30,1,0))/Count(q.ФИО)*100
FROM (SELECT DateDiff("yyyy",[дата_рождения],Date()) AS Age, ФИО
FROM Таблица_2
WHERE пол=True
) as q