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

Откуда:
Сообщений: 101
Добрый день.
Сам запрос выглядит примерно так:

SELECT


FROM Table1 t1 WITH(nolock)
JOIN Table2 t2 WITH(nolock) ON t1.DocumentID = t2.DocumentID
WHERE (t2.StartDate BETWEEN @In_d_StartDate AND @In_d_EndDate OR t2.ENDDate BETWEEN @In_d_StartDate AND @In_d_EndDate)
AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels='')
AND (C.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers='')


Проблема в этих 2 условиях:

AND (I.ItemId in(select ChannelID from #t_Channels) OR @In_ch_Channels='')
AND (C.CustomerID in(select CustomerID from #t_Customers) OR @In_ch_Customers='')

Смысл в чем, если @In_ch_Channels='' то отбирать строки по t_ISISTradeChannel.ItemId не надо, будут входить все.
Тоже самое со второй строкой. Но вот почему-то у меня все это дело не работает. Понимаю что видимо условие составила как-то некорректно. И альтернативы никакой не могу придумать
20 апр 13, 16:22    [14207897]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
Rose_Tree
Member

Откуда:
Сообщений: 101
Прошу прощение, у меня сбой был, сообщение отправилось раньше чем я успела его отредактировать.....

SELECT
t1.Name,
...
FROM Table1 t1 WITH(nolock)
JOIN Table2 t2 WITH(nolock) ON t1.DocumentID = t2.DocumentID
WHERE (t2.StartDate BETWEEN @In_d_StartDate AND @In_d_EndDate OR t2.ENDDate BETWEEN @In_d_StartDate AND @In_d_EndDate)
AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels='')
AND (t1.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers='')


Проблема в этих 2 условиях:

AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels='')
AND (t1.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers='')

Смысл в чем, если @In_ch_Channels='' то отбирать строки по t1 по полю СhannelId не надо, будут входить все.
Тоже самое со второй строкой. Но вот почему-то у меня все это дело не работает. Понимаю что видимо условие составила как-то некорректно. И альтернативы никакой не могу придумать...
Помогите пожалуйста либо исправить ошибку, либо как-то поставить условие по другому...
20 апр 13, 16:29    [14207909]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
qwerty112
Guest
Rose_Tree
Прошу прощение, у меня сбой был, сообщение отправилось раньше чем я успела его отредактировать.....

SELECT 
   t1.Name,
   ...
FROM Table1 t1 WITH(nolock)
JOIN Table2 t2 WITH(nolock) ON t1.DocumentID = t2.DocumentID	
WHERE (t2.StartDate BETWEEN @In_d_StartDate AND @In_d_EndDate OR t2.ENDDate BETWEEN @In_d_StartDate AND @In_d_EndDate)
AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels='')
AND (t1.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers='')



Проблема в этих 2 условиях:

AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels='')
AND (t1.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers='')


Смысл в чем, если @In_ch_Channels='' то отбирать строки по t1 по полю СhannelId не надо, будут входить все.
Тоже самое со второй строкой. Но вот почему-то у меня все это дело не работает. Понимаю что видимо условие составила как-то некорректно. И альтернативы никакой не могу придумать...
Помогите пожалуйста либо исправить ошибку, либо как-то поставить условие по другому...


ты не с Оракала ?

так может, было задумано ?
AND (t1.ChannelId in (select ChannelID from Channels) OR @In_ch_Channels is null)
AND (t1.CustomerID in (select CustomerID from Customers) OR @In_ch_Customers is null)
20 апр 13, 16:40    [14207934]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
Rose_Tree
Member

Откуда:
Сообщений: 101
qwerty112, нет, не с Оракала )

Вот именно что @In_ch_Channels либо = '' либо в ней записана строка

Я вот подумала .....

может ввести дополнительную переменную Check типа int и присвоить ей либо 1 (если @In_ch_Channels = ''), либо 2 (@In_ch_Channels <> '') и уже его подставить в условие, как-то так ...


AND (t1.ChannelId in (select ChannelID from Channels) And Check = 2)

но на сколько это правильно, плодить дополнительные переменные, мне кажется как-то некрасиво ... может и стоит попробовать ....
20 апр 13, 16:50    [14207949]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
qwerty112
Guest
Rose_Tree
qwerty112, нет, не с Оракала )

Вот именно что @In_ch_Channels либо = '' либо в ней записана строка

Я вот подумала .....

может ввести дополнительную переменную Check типа int и присвоить ей либо 1 (если @In_ch_Channels = ''), либо 2 (@In_ch_Channels <> '') и уже его подставить в условие, как-то так ...


AND (t1.ChannelId in (select ChannelID from Channels) And Check = 2)

но на сколько это правильно, плодить дополнительные переменные, мне кажется как-то некрасиво ... может и стоит попробовать ....

конечно, "неправильно"

запрос, вообще где находится ? это ХП ? или это запрос из Рипортинга ?
откуда такая уверенность, что в @In_ch_Channels именно пустая строка, а не нулл ?
20 апр 13, 16:55    [14207955]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
Rose_Tree
Member

Откуда:
Сообщений: 101
qwerty112, перед этим запросом идут проверки разные, причем если изначально переменная = null, то ей присваивается значение пустой строки.

Дело в том что в @In_ch_Channels как раз и передаются возможные значения для отбора. Выглядит примерно так @In_ch_Channels = '2; 3; 4; 5'
Далее создается временная таблица в моем примере Channels, в которую, записываются эти значения, для отбора.
20 апр 13, 17:04    [14207972]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
qwerty112
Guest
Rose_Tree
qwerty112, перед этим запросом идут проверки разные, причем если изначально переменная = null, то ей присваивается значение пустой строки.

Дело в том что в @In_ch_Channels как раз и передаются возможные значения для отбора. Выглядит примерно так @In_ch_Channels = '2; 3; 4; 5'
Далее создается временная таблица в моем примере Channels, в которую, записываются эти значения, для отбора.

показуй весь код, к чему эти "пересказы" ?
20 апр 13, 17:18    [14208002]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
aleks2
Guest
SELECT 
   t1.Name,
   ...
FROM Table1 t1 WITH(nolock)
JOIN Table2 t2 WITH(nolock) ON t1.DocumentID = t2.DocumentID	
WHERE (t2.StartDate BETWEEN @In_d_StartDate AND @In_d_EndDate OR t2.ENDDate BETWEEN @In_d_StartDate AND @In_d_EndDate)
AND (not exists(select * from Channels) or t1.ChannelId in (select ChannelID from Channels))
AND (not exists(select * from Customers) or t1.CustomerID in (select CustomerID from Customers))
20 апр 13, 17:24    [14208012]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
Rose_Tree
Member

Откуда:
Сообщений: 101
aleks2,
СПАСИБО БОЛЬШОЕ!!!! ВСЕ ЗАРАБОТАЛО!
20 апр 13, 17:48    [14208052]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно поставить условие....  [new]
Rose_Tree
Member

Откуда:
Сообщений: 101
qwerty112, спасибо большое за участие к моей проблеме )
20 апр 13, 17:49    [14208054]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить