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

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

Например есть таблица 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
Несколько COUNT(*) в одном запросе
    #32061682
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, мне все же сначала протрезветь надо бы, но... Тремя-то запросами быстрее работать-то должно, вроде как... или мне все же пора трезветь... :)
...
Рейтинг: 0 / 0
Несколько COUNT(*) в одном запросе
    #32061686
Korikoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я в курсе, только вот возможно ли все это
в одном запросе сделать?
...
Рейтинг: 0 / 0
Несколько COUNT(*) в одном запросе
    #32061687
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Просто я этих кэйзов не люблю. :)
...
Рейтинг: 0 / 0
Несколько COUNT(*) в одном запросе
    #32061702
Сергей В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Несколько COUNT(*) в одном запросе
    #32061735
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Несколько COUNT(*) в одном запросе
    #32061737
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно и так....
Код: 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
Несколько COUNT(*) в одном запросе
    #32061778
Korikoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ВСЕМ!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Несколько COUNT(*) в одном запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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