Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Написание запроса (как почитать)  [new]
lynatik50
Member

Откуда:
Сообщений: 111
Есть 2 таблицы:
1. Содержит организации (ОR)
2. Документы по годам которые заполняли эти организации (DOC)

Таб 1.

id | Имя (name)
1 | школа
2 | сад
3 | банк

Таб 2.

id | id_OR | Doc_Year
1 | 1 |2001
2 | 1 |2002
3 | 1 |2003
4 | 2 |2003
5 | 3 |2001
6 | 3 |2002
7 | 2 |2004
8 | 2 |2005
9 | 1 |2004
10 | 1 |2005
11 | 1 |2006
12 | 3 |2003


Нужно посчитать количество Организаций которые сдали Док-ты за года с 2001 по 2006, соответственно в случае примера такая организация только одна - это школа. Подскажите пожалуйста, как это сделать?
28 авг 13, 12:42    [14765371]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
кириллk
Member

Откуда:
Сообщений: 1062
lynatik50,

select * таб2
left join таб1 on таб1.id=таб2.id_OR
28 авг 13, 12:45    [14765384]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
кириллk
Member

Откуда:
Сообщений: 1062
кириллk,

select * таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
28 авг 13, 12:46    [14765391]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
кириллk
Member

Откуда:
Сообщений: 1062
кириллk,

select * таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
and
Doc_Year between 2000 and 2007
28 авг 13, 12:48    [14765411]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
lynatik50
Member

Откуда:
Сообщений: 111
кириллk,

это то ясно задача немного другая

посчитать количество Организаций которые сдали Док-ты за года с 2001 по 2006, соответственно в случае примера такая организация только одна - это школа. Подскажите пожалуйста, как это сделать?
28 авг 13, 12:50    [14765416]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
кириллk
Member

Откуда:
Сообщений: 1062
кириллk,


select count(id_OR) таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
and
Doc_Year between 2000 and 2007
28 авг 13, 12:50    [14765417]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
lynatik50
Member

Откуда:
Сообщений: 111
кириллk
кириллk,


select count(id_OR) таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
and
Doc_Year between 2000 and 2007




Ок, спасибо сейчас попробую))))
28 авг 13, 12:50    [14765422]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
lynatik50
кириллk
кириллk,


select count(id_OR) таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
and
Doc_Year between 2000 and 2007




Ок, спасибо сейчас попробую))))
Можете не пробовать - запрос неправильный! :))
Попробуйте COUNT(DISTIUNCT id_OR)
28 авг 13, 12:55    [14765462]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
Гость333
Member

Откуда:
Сообщений: 3683
select count(*)
from
(
   select id_OR
   from Таб2
   where Doc_Year between 2001 and 2006
   group by id_OR
   having count(distinct Doc_Year) = 2006 - 2001 + 1
) t
28 авг 13, 12:59    [14765482]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
lynatik50
Member

Откуда:
Сообщений: 111
кириллk
кириллk,


select count(id_OR) таб2
left join таб1 on таб1.id=таб2.id_OR
where таб1.Имя (name) = 'школа'
and
Doc_Year between 2000 and 2007




Я наверное немного корректно описал задачу.... дело в том что вышенаписанный запрос возвращает Организации которые сдавали док-ты хотя бы в один из годов между 2000 и 2007, а необходимо, что бы вернулись организации которые сдали док - ты за каждый из этих годов, если организация не сдала док - ты хоть за один год она не должна попасть в список

посчитать количество Организаций которые сдали Док-ты за года с 2001 по 2006, соответственно в случае примера такая организация только одна - это школа. Подскажите пожалуйста, как это сделать?
28 авг 13, 13:11    [14765569]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
lynatik50
Member

Откуда:
Сообщений: 111
Гость333
select count(*)
from
(
   select id_OR
   from Таб2
   where Doc_Year between 2001 and 2006
   group by id_OR
   having count(distinct Doc_Year) = 2006 - 2001 + 1
) t


спасибо по ходу то
28 авг 13, 13:17    [14765598]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
кириллk
Member

Откуда:
Сообщений: 1062
lynatik50,

iap предложил "Попробуйте COUNT(DISTIUNCT id_OR) "
28 авг 13, 13:17    [14765600]     Ответить | Цитировать Сообщить модератору
 Re: Написание запроса (как почитать)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
кириллk
lynatik50,

iap предложил "Попробуйте COUNT(DISTIUNCT id_OR) "
Это уже неактуально - задача-то была всё равно другая!
28 авг 13, 13:21    [14765635]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить