Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
qwerty112
Guest |
ты не с Оракала ? так может, было задумано ? 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
qwerty112
Guest |
конечно, "неправильно" запрос, вообще где находится ? это ХП ? или это запрос из Рипортинга ? откуда такая уверенность, что в @In_ch_Channels именно пустая строка, а не нулл ? |
||
20 апр 13, 16:55 [14207955] Ответить | Цитировать Сообщить модератору |
Rose_Tree Member Откуда: Сообщений: 101 |
qwerty112, перед этим запросом идут проверки разные, причем если изначально переменная = null, то ей присваивается значение пустой строки. Дело в том что в @In_ch_Channels как раз и передаются возможные значения для отбора. Выглядит примерно так @In_ch_Channels = '2; 3; 4; 5' Далее создается временная таблица в моем примере Channels, в которую, записываются эти значения, для отбора. |
20 апр 13, 17:04 [14207972] Ответить | Цитировать Сообщить модератору |
qwerty112
Guest |
показуй весь код, к чему эти "пересказы" ? |
||
20 апр 13, 17:18 [14208002] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Rose_Tree Member Откуда: Сообщений: 101 |
aleks2, СПАСИБО БОЛЬШОЕ!!!! ВСЕ ЗАРАБОТАЛО! |
20 апр 13, 17:48 [14208052] Ответить | Цитировать Сообщить модератору |
Rose_Tree Member Откуда: Сообщений: 101 |
qwerty112, спасибо большое за участие к моей проблеме ) |
20 апр 13, 17:49 [14208054] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |