Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите с условием для прямого запроса (число прочтений - 3322 )
pirit
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 13. Марта 2007
Помогите с условием для прямого запроса
13. Марта 2007 :: 08:32
Печать  
есть

|select
|      J.IDDocDef as ДокДвиж_вид,
|      J.$ОбщийРеквизит.автор as [менеджер $Справочник.пользователи],
|      from
| _1SJourn as J
|where
|

А дальше нужно поставить условие на отбор по менеджеру, только по виду документа "Реализация"
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #1 - 13. Марта 2007 :: 08:50
Печать  
читай документацию, либо давай более полную информацию.
правильный вопрос содержит половину ответа.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
pirit
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 13. Марта 2007
Re: Помогите с условием для прямого запроса
Ответ #2 - 13. Марта 2007 :: 08:59
Печать  
В запросе отбираются любые документы, а мне нужен фильтр по менеджерам когда документ в подборке имеет вид "Реализация" а остальные виды документов нужны без фильтра.

           
Код
Выбрать все
|SELECT
|	VT.Фирма as [Фирма $Справочник.Фирмы],
|	VT.Договор as [Договор $Справочник.Договоры],
|(select спр.parentext from sc204 as спр where спр.id=vt.Договор) as [клиент $Справочник.Контрагенты],
|	VT.менеджер as [Менеджер $Справочник.Пользователи],
|	VT.ВидДолга as [ВидДолга $Перечисление.ВидыДолга],
|	VT.КредДокумент as [КредДокумент $Документ],
|	VT.ФЛ as [ФЛ $Справочник.СвоиЮрЛица],
|	VT.Регион as [Регион $Справочник.Склады],
|	VT.ДокДвиж as [ДокДвиж $Документ],
|	MAX(VT.ДокДвиж_вид) as ДокДвиж_вид,
|	Sum(VT.СуммаУпрНачальныйОстаток) as СуммаУпрНачальныйОстаток,
|	Sum(VT.СуммаУпрПриход) as СуммаУпрПриход,
|	Sum(VT.СуммаУпрРасход) as СуммаУпрРасход
|FROM (	SELECT
|		РегИтоги.sp4322 as Фирма,
|		РегИтоги.sp4323 as Договор,
|		РегИтоги.sp4325 as ВидДолга,
|		РегИтоги.sp4326 as КредДокумент,
|		РегИтоги.sp6281 as ФЛ,
|		РегИтоги.sp6442 as Регион,
|		'' as ДокДвиж,
|		'' as ДокДвиж_вид,
|	 '' as Менеджер,
|		РегИтоги.sp4328 as СуммаУпрНачальныйОстаток,
|		0 as СуммаУпрПриход,
|		0 as СуммаУпрРасход
|		FROM
|			rg4335 as РегИтоги (nolock)
|		WHERE
|			РегИтоги.PERIOD = {d '2007-01-01'}
|			AND (1=0
|			OR РегИтоги.sp4328<>0)
|	UNION ALL
|	SELECT
|		РегДвиж.sp4322,
|		РегДвиж.sp4323,
|		РегДвиж.sp4325,
|		РегДвиж.sp4326,
|		РегДвиж.sp6281,
|		РегДвиж.sp6442,
|		РегДвиж.IDDoc as ДокДвиж,
|		J.IDDocDef as ДокДвиж_вид,
|		J.sp74 as [менеджер $Справочник.пользователи],
|		РегДвиж.sp4328*(1-регДвиж.DEBKRED*2),
|		0,
|		0
|		FROM
|			ra4335 as РегДвиж (nolock)
|		INNER
|			JOIN _1SJourn as J ON РегДвиж.IDDOC=J.IDDOC
|		WHERE
|			(J.Date_Time_IDDoc >= '20070201') AND (J.Date_Time_IDDoc <= '20070201')
|	UNION ALL	SELECT
|		РегПрихРасх.sp4322 as Фирма,
|		РегПрихРасх.sp4323 as Договор,
|		РегПрихРасх.sp4325 as ВидДолга,
|		РегПрихРасх.sp4326 as КредДокумент,
|		РегПрихРасх.sp6281 as ФЛ,
|		РегПрихРасх.sp6442 as Регион,
|		РегПрихРасх.IDDoc as ДокДвиж,
|		J.IDDocDef as ДокДвиж_вид,
|		J.sp74 as [менеджер $Справочник.пользователи],
|		0 as СуммаУпрНачальныйОстаток,
|		(1-РегПрихРасх.DEBKRED)*РегПрихРасх.sp4328 as СуммаУпрПриход,
|		РегПрихРасх.DEBKRED*РегПрихРасх.sp4328 as СуммаУпрРасход
|		FROM
|			ra4335 as РегПрихРасх (nolock)
|		INNER
|			JOIN _1SJourn as J ON РегПрихРасх.IDDOC=J.IDDOC
|		WHERE
|			(J.Date_Time_IDDoc >= '20070201') AND (J.Date_Time_IDDoc <= '20070201Z')
|) as VT
| 	WHERE 



Сюда нужно условие,

я тут чегото написал, но несовсем соображая что это

|(CASE
|    WHEN vt.ДокДвиж_вид = :выбвид THEN
|            vt.Менеджер =:выбменеджер
|      ELSE
|   END)


|GROUP BY
|      Фирма,
|      Договор,
|      ВидДолга,
|      КредДокумент,
|      ФЛ,
|      Регион,
|      ДокДвиж,
|      Менеджер

Сам запрос
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #3 - 13. Марта 2007 :: 09:01
Печать  
BOL - Where + Case
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #4 - 13. Марта 2007 :: 09:12
Печать  
Может натолкнет на мысль
подобный ПРИНЦИП недавно использовал, но есть подозрение что он не оптимален

Код
Выбрать все
|SELECT
|  Документы.ДокДвиж_вид_вид as ДокДвиж_вид
|  Документы.МенеджерДляОтбора as [Менагер $Справочник.Менагеров]
| FROM
|(
|      J.IDDocDef as ДокДвиж_вид,  
|      ICASE(J.IDDocDef = :СтроковыйИдентификаторВидаДокументаРеализация, J.$ОбщийРеквизит.автор, NULL) as МенеджерДляОтбора
|          from
| _1SJourn as J  
|    HAVING
|       ((МенеджерДляОтбора= $ПустойИД) or (МенеджерДляОтбора in (SELECT VAL FROM "+ВременнаяТаблицаМенагеровДляОтбора+")))
|) as Документы 


База Была ДБФ - как обычно та что ICASE надо менять на CASE
Где-то так я думаю, но гуру подскажут правильней
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #5 - 13. Марта 2007 :: 09:21
Печать  
И еще что-то мне подсказвает что типизацию с помощью скобок [] из запросов внутри VT необходимо убирать - ведь потом в общей выборке все равно типизация идет опять

Потеря производительности будет, ведь в документации написано - не надо "Часто применять типизацию"
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
pirit
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 13. Марта 2007
Re: Помогите с условием для прямого запроса
Ответ #6 - 13. Марта 2007 :: 09:23
Печать  
беда в том что и в реализации встречаются пустые менеджеры
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #7 - 29. Марта 2007 :: 10:59
Печать  
Сделай левый join к _1sjourn на $Документ.Реализация + условие $Документ.Реализация.Менеджер = :выбМенеджер or $Документ.Реализация.Менеджер is NULL
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #8 - 29. Марта 2007 :: 12:02
Печать  
mash писал(а) 29. Марта 2007 :: 10:59:
Сделай левый join к _1sjourn на $Документ.Реализация + условие $Документ.Реализация.Менеджер = :выбМенеджер or $Документ.Реализация.Менеджер is NULL

"IS NULL" низя! Нужно $ПустойИД или $ПустойИД13
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите с условием для прямого запроса
Ответ #9 - 29. Марта 2007 :: 16:20
Печать  
Если таблица $Документ.Реализация не приджойнится ( например документ не вида "Реализация" ),то $Документ.Реализация.Менеджер будет именно NULL (не забываем что у нас внешене соединение)
  

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