Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Построение запроса по выбору (число прочтений - 3414 )
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Построение запроса по выбору
28. Мая 2012 :: 03:18
Печать  
Есть Справочник Контрагенты
В справочнике контрагенты реквизит ЮрФиз Лицо может быть либо
физ лицом либо Юр лицом.
как можно организовать запрос по условию вида справочника?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Построение запроса по выбору
Ответ #1 - 28. Мая 2012 :: 05:56
Печать  
Лидо достраивай до ВидСправочника+id, либо right(,9)
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Построение запроса по выбору
Ответ #2 - 28. Мая 2012 :: 06:16
Печать  
Eprst писал(а) 28. Мая 2012 :: 05:56:
Лидо достраивай до ВидСправочника+id, либо right(,9)


наверное, ты имел в виду left(, 4)  Смех


Код
Выбрать все
select
*
from
$Справочник.Контрагенты спр
Where
left($спр.ЮрФизЛицо, 4) = $ВидСправочника36.<нужный тебе вид> 

  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Построение запроса по выбору
Ответ #3 - 28. Мая 2012 :: 06:23
Печать  
Eprst писал(а) 28. Мая 2012 :: 05:56:
Лидо достраивай до ВидСправочника+id, либо right(,9)

нет не то я имел ввиду.
Я выбираю контрагентов, естественно что где то есть справочник.Физ лица, а где - то Справочник.ЮрЛица.
Так вот нужно так их за джойнить, чтобы выбирать данные из определенной таблицы. Либо там либо там.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Построение запроса по выбору
Ответ #4 - 28. Мая 2012 :: 06:34
Печать  
mozer писал(а) 28. Мая 2012 :: 06:23:
Так вот нужно так их за джойнить, чтобы выбирать данные из определенной таблицы. Либо там либо там.



Код
Выбрать все
select
спр.*,
IsNull(ЮЛ.Descr, ФЛ.Descr)
from
$Справочник.Контрагенты спр
Left Join $Справочник.ЮрЛица ЮЛ on left($спр.ЮрФизЛицо, 4) = $ВидСправочника36.ЮрЛица And right($спр.ЮрФизЛицо, 9) = ЮЛ.ID
Left Join $Справочник.ФизЛица ФЛ on left($спр.ЮрФизЛицо, 4) = $ВидСправочника36.ФизЛица And right($спр.ЮрФизЛицо, 9) = ФЛ.ID 



в примитиве так
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Построение запроса по выбору
Ответ #5 - 28. Мая 2012 :: 06:42
Печать  
Satans Claws писал(а) 28. Мая 2012 :: 06:16:
наверное, ты имел в виду left(, 4)  Смех


не, я думал, ему для фильтра надо по клиентосам это всё.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Построение запроса по выбору
Ответ #6 - 28. Мая 2012 :: 17:33
Печать  
Satans Claws писал(а) 28. Мая 2012 :: 06:34:
mozer писал(а) 28. Мая 2012 :: 06:23:
Так вот нужно так их за джойнить, чтобы выбирать данные из определенной таблицы. Либо там либо там.



Код
Выбрать все
select
спр.*,
IsNull(ЮЛ.Descr, ФЛ.Descr)
from
$Справочник.Контрагенты спр
Left Join $Справочник.ЮрЛица ЮЛ on left($спр.ЮрФизЛицо, 4) = $ВидСправочника36.ЮрЛица And right($спр.ЮрФизЛицо, 9) = ЮЛ.ID
Left Join $Справочник.ФизЛица ФЛ on left($спр.ЮрФизЛицо, 4) = $ВидСправочника36.ФизЛица And right($спр.ЮрФизЛицо, 9) = ФЛ.ID 



в примитиве так


Спасибо идею понял
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Построение запроса по выбору
Ответ #7 - 29. Мая 2012 :: 04:44
Печать  
Eprst писал(а) 28. Мая 2012 :: 06:42:
не, я думал, ему для фильтра надо по клиентосам это всё.


учитывая, что справочники юрлиц и физлиц обычно густонаселены, ID9 у них будут пересекаться - мама не горюй.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Построение запроса по выбору
Ответ #8 - 29. Мая 2012 :: 06:28
Печать  
А нафига спрашивается такие завороты?
На сколько я понял это реквизит тип Справочник.
ну так и пишем:
Код
Выбрать все
select
$s.ЮрЛицо [Лицо $Справочник]
from $Справочник.Контрагенты s with (nolock)
-- а это если надо наложить условие на конкретное значение
where
s.id=:ВыбЗначение~
 


  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Построение запроса по выбору
Ответ #9 - 29. Мая 2012 :: 08:05
Печать  
varelchik писал(а) 29. Мая 2012 :: 06:28:
А нафига спрашивается такие завороты?
На сколько я понял это реквизит тип Справочник.
ну так и пишем:
Код
Выбрать все
select
$s.ЮрЛицо [Лицо $Справочник]
from $Справочник.Контрагенты s with (nolock)
-- а это если надо наложить условие на конкретное значение
where
s.id=:ВыбЗначение~
 



вообще то идея была в другом.
я хотел в запросе использовать IF и собирать таблицу выходную в запросе.
Если физЛицо тогда джойнить с одной таблицой, если Юрлицо, то с другой. И сполями так же. Только не знаю можно ли.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Построение запроса по выбору
Ответ #10 - 29. Мая 2012 :: 10:26
Печать  
проще джойнить обе две + coalesce в селект листе.
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Построение запроса по выбору
Ответ #11 - 30. Мая 2012 :: 05:31
Печать  
Код
Выбрать все
select
RTRIM(CAST(COALESCE($ЮрЛицо.ПолнНаименование, $ФизЛицо.ПолнНаименование) as varchar)) AS _FNAME
RTRIM(CAST(COALESCE($ЮрЛицо.ИНН, $ФизЛицо.ИНН) as varchar)) AS _INN
from $Справочник.Контрагенты  AS Контрагент (NoLOCK)
Left join $Справочник.ЮрЛица AS ЮрЛицо (NoLOCK) ON $Контрагент.ЮрФизЛицо = $ВидСправочника36.ЮрЛица+ЮрЛицо.ID
Left join $Справочник.ФизЛица AS ФизЛицо (NoLOCK) ON $Контрагент.ЮрФизЛицо = $ВидСправочника36.ФизЛица+ФизЛицо.ID 

  
Наверх
wwwICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Построение запроса по выбору
Ответ #12 - 30. Мая 2012 :: 05:49
Печать  
$ЮрЛицо.ПолнНаименование
-тут ждёт неприятный облом... це же строка неогр. длины (если это запрос на фоксе, к примеру)
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Построение запроса по выбору
Ответ #13 - 30. Мая 2012 :: 06:07
Печать  
насчет фокса незнаю, но в MSSQL работает
  
Наверх
wwwICQ  
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Построение запроса по выбору
Ответ #14 - 04. Июня 2012 :: 04:35
Печать  
Anatol писал(а) 30. Мая 2012 :: 06:07:
насчет фокса незнаю, но в MSSQL работает

Вот спасибо за идею.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать