Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите!!! В "WHERE" проблема с "IN"!!! (число прочтений - 2462 )
Misterek
YaBB Newbies
*
Отсутствует


Начинающий программист

Сообщений: 8
Зарегистрирован: 19. Сентября 2006
Пол: Мужской
Помогите!!! В "WHERE" проблема с "IN"!!!
13. Ноября 2006 :: 06:29
Печать  
Помогите, пожалуйста!!!
Пример:
"SELECT
Рег.IDDoc    AS [Док$Документ]
,Жур.IDDocDef AS Док_вид
FROM $Регистр.ОстаткиТоваров as Рег WITH (NOLOCK)
INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
   LEFT JOIN $Документ.Платежка AS ДП WITH (NOLOCK) ON ДП.IDDoc = Жур.IDDoc AND
   (CASE
     WHEN (Жур.IDDocDef=$ВидДокумента.Платежка)
     THEN $ДП.Клиент IN ('   52H   ' ) //т.е. клиент входит в СписокЗначений клиентов
     END)".
Выдает ошибку: "Синтаксическая ошибка ... "IN" ". Не знаю в чем проблема...
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите!!! В "WHERE" проблема с "IN"!!!
Ответ #1 - 13. Ноября 2006 :: 06:39
Печать  
насколько я знаю, применительно к данной конструкции: IN может использоваться только в секции условия WHEN, а у тебя - в результирующей секции THEN - что это значит (в твоем понимании)?
  
Наверх
 
IP записан
 
Misterek
YaBB Newbies
*
Отсутствует


Начинающий программист

Сообщений: 8
Зарегистрирован: 19. Сентября 2006
Пол: Мужской
Re: Помогите!!! В "WHERE" проблема с "IN"!!!
Ответ #2 - 13. Ноября 2006 :: 06:50
Печать  
В данном случае используется конструкция "CASE...WHEN...THEN...END". Т.е. если выполнится некоторое условие, написанное после WHEN, то тогда вставится условие, написанное после THEN в основной (результирующий) запрос.
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите!!! В "WHERE" проблема с "IN"!!!
Ответ #3 - 13. Ноября 2006 :: 06:56
Печать  
конструкция "CASE...WHEN...THEN...END" должна выдавать результат, а не вставлять условие
попробуй так:
Код
Выбрать все
($ДП.Клиент IN (CASE  
     WHEN (Жур.IDDocDef=$ВидДокумента.Платежка)
     THEN ('   52H   ' ) //т.е. клиент входит в СписокЗначений клиентов
     ELSE $ДП.Клиент
     END)) 



хотя я не знаю, так ли тебе надо - в случае невыполнения условия - что должно сопоставляться?
  
Наверх
 
IP записан
 
Misterek
YaBB Newbies
*
Отсутствует


Начинающий программист

Сообщений: 8
Зарегистрирован: 19. Сентября 2006
Пол: Мужской
Re: Помогите!!! В "WHERE" проблема с "IN"!!!
Ответ #4 - 13. Ноября 2006 :: 07:05
Печать  
Суть в следующем: берется текущий документ по товару из регистра "ОстаткиТоваров" и, если у документа есть реквизит шапки "Клиент", проверить входит ли этот клиент в выбранный СписокЗначений клиентов в форме.
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите!!! В "WHERE" проблема с "IN"!!!
Ответ #5 - 13. Ноября 2006 :: 14:47
Печать  
Проще просто поставить left join c платежкой а запрос переписать как
Код
Выбрать все
	SELECT
	  Рег.IDDoc    AS [Док$Документ],
	  Жур.IDDocDef AS Док_вид
	FROM
		$Регистр.ОстаткиТоваров as Рег WITH (NOLOCK)
			INNER JOIN
		_1Sjourn as Жур
			    ON Жур.IDDoc = Рег.IDDoc
			LEFT JOIN
		$Документ.Платежка AS ДП WITH (NOLOCK)
			    ON ДП.IDDoc = Жур.IDDoc
	where
		($ДП.Клиент IN ('   52H   ' ) or $ДП.Клиент IS NULL)";

 



  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать