Таблица S_EMP (содержит
информацию о служащих фирмы). Столбцы :
ID - идентификатор
каждого служащего (его номер в таблице),
LAST_NAME - фамилия
служащего,
FIRST_NAMEмя служащего, USERIDогическое
имя пользователя,
START_DATE- дата
начала работы,
TITLEолжность,DEPT_IDомер
отдела, в котором работает служащий
Необходимо создать запрос для вывода общего количества служащих и количеств служащих, нанятых в 1990, 1991 и 1992 годах. Создать для столбцов псевдонимы «Общее количество», «1990», «1991», «1992». Мозгов хватает лишь на то, чтобы создать запрос для каждого года отдельно, например для 1990 : SELECT COUNT (ID) "1990" FROM S_EMP WHERE TO_CHAR( START_DATE, 'YYYY' ) =1990) ; А как их объединить ? С помощью подзапросов ? Подскажите, пожалуйста... Работаю в H2

@темы: База данных, MS SQL

Комментарии
25.11.2011 в 21:26

alhames.ru
SELECT COUNT(DISTINCT A.`id`) AS '1990', COUNT(DISTINCT B.`id`) AS '1991', COUNT(DISTINCT C.`id`) AS '1992'
FROM `s_emp` AS X
LEFT JOIN `s_emp` AS A ON (X.`id` = A.`id` AND A.`start_date` = 1990)
LEFT JOIN `s_emp` AS B ON (X.`id` = B.`id` AND B.`start_date` = 1991)
LEFT JOIN `s_emp` AS C ON (X.`id` = C.`id` AND C.`start_date` = 1992)

Примерно такая идея (mysql). Что-то ничего лучше в голову не приходит..
26.11.2011 в 01:53

“To be good is not enough when you dream of being great.”
Может попробовать что-то в этом духе? Это псевдоPostgreSQL:

select count(distinct userid) as "общее количество",
(select count(distinct userid) as "1990"
from s_emp
where start_date >= 01.01.1990
and start_date<=31.12.1990),
(select
по тому же принципу, только колонну назвать 1991 и даты прописать от 1го января до 31 декабря
),
(select
то же самое, только с 1992
)
from s_emp;

В любом случае, попробуйте сначала выписать общее количество, потом добавляйте внутренние запросы.
26.11.2011 в 03:30

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
в oracle примерно так:


26.11.2011 в 03:32

alhames.ru
А разве JOIN работает не быстрее подзапросов?
26.11.2011 в 07:35

Всем спасибо=)