Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Несколько COUNT(*) в одном запросе / 8 сообщений из 8, страница 1 из 1
24.10.2002, 17:33:54
    #32061675
Korikoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Привет Всем!

Вот такая проблема:

Например есть таблица doc, содержащая реквизиты документов и исполнителя каждого документа:
Doc.doc_id (int) PK
Doc.employee_id (int) FK
Doc.dateexec (datetime)
...

Хотелось бы в одном запросе видеть такую информацию:
1. Кол-во всех документов для каждого исполнителя (numall)
2. Кол-во исполненных с нарушением срока (01/06/2002) для каждого исполнителя (numbad),
т.е. с условием: Doc.dateexec > 01/06/2002
3. Кол-во исполненных в срок для каждого исполнителя (numgood),
т.е. с условием: Doc.dateexec <= 01/06/2002

Кроме вот этого, ничего путного не получается :(

SELECT Doc.employee_id, COUNT(*) AS numall
FROM dbo.doc Doc
GROUP BY Doc.employee_id

Может есть какое решение, буду премного благодарен ???
...
Рейтинг: 0 / 0
24.10.2002, 17:40:01
    #32061682
TBB
TBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Может, мне все же сначала протрезветь надо бы, но... Тремя-то запросами быстрее работать-то должно, вроде как... или мне все же пора трезветь... :)
...
Рейтинг: 0 / 0
24.10.2002, 17:50:48
    #32061686
Korikoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Да я в курсе, только вот возможно ли все это
в одном запросе сделать?
...
Рейтинг: 0 / 0
24.10.2002, 17:52:13
    #32061687
TBB
TBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Можно. Просто я этих кэйзов не люблю. :)
...
Рейтинг: 0 / 0
24.10.2002, 18:18:52
    #32061702
Сергей В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Select Employers.Employer_id, (Select Count(*) From Doc Where Doc.Employer_id=Employers.Employer_Id) As NumAll,
(Select Count(*) From Doc Where Doc.Employer_id=Employers.Employer_Id And Doc.dateexec > '20020601' ) As NumBad,
(Select Count(*) From Doc Where Doc.Employer_id=Employers.Employer_Id And Doc.dateexec <= '20020601' ) As NumGood From Employers
В MS SQL будет работать, если исполнители хранятся в таблице Employers
...
Рейтинг: 0 / 0
24.10.2002, 20:28:44
    #32061735
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Код: plaintext
1.
2.
3.
4.
5.
SELECT Doc.employee_id, 
nugood=SUM(case when Doc.dateexec > '20020601' then  1  else  0  end),
nubad=SUM(case when Doc.dateexec > '20020601' then  0  else  1  end)
numall=COUNT(*)
FROM dbo.doc Doc 
GROUP BY Doc.employee_id 

эт одним запросом...
...
Рейтинг: 0 / 0
24.10.2002, 20:33:03
    #32061737
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
а можно и так....
Код: plaintext
1.
2.
3.
4.
5.
SELECT numbad=numall-numgood,*
SELECT Doc.employee_id, 
numgood=SUM(case when Doc.dateexec > '20020601' then  1  else  0  end),
numall=COUNT(*)
FROM dbo.doc Doc 
GROUP BY Doc.employee_id 
...
Рейтинг: 0 / 0
25.10.2002, 08:38:41
    #32061778
Korikoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько COUNT(*) в одном запросе
Спасибо ВСЕМ!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Несколько COUNT(*) в одном запросе / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]