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

Откуда:
Сообщений: 271
по задаче, нужно выгрузить список договоров прошлых периодов, которые не были лонгированы в 2014.
признак лонгации - по клиенту и виду
задачу решил так:
with que as (
select t.ContractNumber
from [data].[dbo].[76] t
inner join  [data].[dbo].[76] p on t.client=p.client and t.vid=p.vid 
where 

(t.DateContract between '20070501' and '20070531' or t.DateContract between '20080501' and '20080531' or t.DateContract between '20090501' and '20090531')
and p.DateContract between '20140101' and '20141231'
group by  t.ContractNumber
)

select *
from [data].[dbo].[76] z

where 
(z.DateContract between '20070501' and '20070531' or z.DateContract between '20080501' and '20080531' or z.DateContract between '20090501' and '20090531')
and z.ContractNumber not in (select * from que)

Но может есть более оптимальный способ получить эти же данные
Напр с использованием left join, но если указываю в условиях p.client is null, получаю пустой лист с результатами.
Где ошибаюсь? может is null нужно указать для другого поля?
25 апр 15, 15:41    [17562960]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по join  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select * 
from [data].[dbo].[76] t
where (t.DateContract between '20070501' and '20070531' 
	or t.DateContract between '20080501' and '20080531' 
	or t.DateContract between '20090501' and '20090531')
and not exists(select * from [data].[dbo].[76] p
               where p.client = t.client 
				 and p.vid    = t.vid 
				 and p.DateContract between '20140101' and '20141231'
)
27 апр 15, 07:31    [17567231]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по join  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
LexusR, спасибо
27 апр 15, 09:51    [17567576]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить