Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Получение списка элементов группы (число прочтений - 4202 )
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Получение списка элементов группы
07. Декабря 2006 :: 12:00
Печать  
Всем, приятного времени суток.

Существует ли сравнительно легкий способ получить в ПОДзапросе список элементов, принадлежащих группе, получаемой в основном запросе?
Под запрос - Что-то типа вот этого:
[code]
(Select distinct Конт.Id From $Справочник.Контрагенты as Конт Where Конт.ParentId in (???)  and Конт.IsFolder=2 )//Группа.ID
[/code]

Множет кто, сталкивался?
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #1 - 07. Декабря 2006 :: 12:59
Печать  
Видимо нет  Печаль жаль  Плачущий
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #2 - 11. Декабря 2006 :: 07:14
Печать  
а возможно приведение целого запроса?
ХХХХХ... (Select distinct Конт.Id From ......
что вместо ХХХХХ? для чего потом используется Конт.Id?
и какова задача запроса в целом вообще?
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #3 - 11. Декабря 2006 :: 07:35
Печать  
Конечно возможно!

Код
Выбрать все
(Select Top 1    
|     Sum(Рег.СуммаВалОстаток)
|
|     From $РегистрОстатки.Покупатели(:ДатаКонца~,,  
|                                          ,
|                                          (Договор),СуммаВал) As Рег      
|     Where  Рег.Договор in (Select  Дог.id From $Справочник.Договоры As Дог Where   Дог.ParentExt in (???)) 


Первое "Where" использовано намеренно так как в "вопросах" должно быть использованно Конт.Id - текущая группа контрагентов.
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #4 - 11. Декабря 2006 :: 08:08
Печать  
хм...
интересный запросец Улыбка
вижу
Select Top 1    
     Sum(Рег.СуммаВалОстаток) -- тут всего одно поле...

     From .....
есть условие
Where  Рег.Договор in ( -- тут у нас ид элеменотов должно быть НЕ ГРУПП.

Select  Дог.id From $Справочник.Договоры As Дог Where   Дог.ParentExt in (???)
представим что ранее уже сформировали и у нас ??? = Рег.Договор.
в результате что мы хотим получить то?
и какова задача запроса в целом вообще?
т.е. какие данные на выходе хочется получить?
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #5 - 11. Декабря 2006 :: 08:25
Печать  
вместо "???" - должн быть список элементов(не групп), кот принадлежат полученной ранее группе - "Конт.Id"
"Тор 1" - действительно не нужен (забыл убрать)
А получить хоцца банально остаток по Регистру "Покупатели" по полученной ранее! группе.
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #6 - 11. Декабря 2006 :: 09:26
Печать  
будем считать что я тугодум Улыбка

т.е. на выходе мы хотим получить одну колонку с суммами
Select   Sum(Рег.СуммаВалОстаток)
    From .....
причем по группе Конт.Id - она откедова взялась?
хочется видеть ПОЛНЫЙ запрос .
в последнем твоем запросе у тя справочник договоров многоуровневый? или всеж есть группа контрагентов и нужно получить по ней?
если группа извесна заранее то можно вставить условие в вирт. таб.,
т.е. сделать соединение а потом наложить условие.
или всеж я чего то непонимаю Печаль
возможно поможет exists - полусоединение
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #7 - 11. Декабря 2006 :: 10:17
Печать  
Запрос кот. был представлен выше, является подзапосом основного, который как раз и генит группу Конт.id. Справочник договоров 1-уровненвый. В виртуальную таблицу вставить условие нельзя (ругается на переменную условия), поэтому в подзапросе я и использую Where
Полный текст основного запроса примерно следующий:
Код
Выбрать все
|Select
|Конт.id,  
|(Select Top 1    
|     Sum(Рег.СуммаВалОстаток)
|
|     From $РегистрОстатки.Покупатели(:ДатаКонца~,,  
|                                          ,
|                                          (Договор),СуммаВал) As Рег      
|     Where  Рег.Договор in (Select  Дог.id From $Справочник.Договоры As Дог Where   Дог.ParentExt in (???)) as |Остаток ,
|From $Справочник.Контрагенты as Конт ....
 



По поводу как "exists" тут поможет можно по подробнее?
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #8 - 11. Декабря 2006 :: 10:32
Печать  
ага... вот кажисть понимаю...
вообщем так: имеем справочник контриков + таблицу остатков в которой есть только договора.
нехитрым запросом
Select Конт.id From $Справочник.Контрагенты as Конт (тут условия отбора групп)....
получаем группы
далее требуется вторая колонка с остками по этим группам...
Select Рег.Договор
     Sum(Рег.СуммаВалОстаток)
     From $РегистрОстатки.Покупатели(:ДатаКонца~,,   
                                         ,
                                         (Договор),СуммаВал) As Рег   
тут надо бы условие... по определенным договорам вот тут то нам может помоч
exists
т.е.
select * from (....) Рег
where exists (select * from Конт where Конт.a = Рег.a)
где а - поле по которому можно связать.
данный запрос вернет записи из Рег для которых имеются соответствующие строки
в Конт.

Может мутно но как нибудь так Подмигивание
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #9 - 11. Декабря 2006 :: 11:09
Печать  
в догонку вопрос
>В виртуальную таблицу вставить условие нельзя (ругается на переменную условия),
покажи как условия ставил в вирт.таб.?
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #10 - 11. Декабря 2006 :: 11:52
Печать  
>данный запрос вернет записи из Рег для которых имеются соответствующие строки  
в Конт.

А у них нету общих записей - общее Договор.ParentExt (Рег.Договор)  = Конт.Id поэтому я пытался такой хоровод соорудить(... Where  Рег.Договор in (Select  Дог.id From $Справочник.Договоры As Дог Where   Дог.ParentExt in (???)) as Остаток  )

В общем смысл всего этого - получение списка элементов справочника(не групп - хотя это не важно) по известному Родителю - что-то типа функции "ПринадлежитГруппе()"

В вирт. таб условие вставлял след образом:
Код
Выбрать все
From $РегистрОстатки.Покупатели(:ДатаКонца~,,  
| Договор in (Select distinct Дог.id From $Справочник.Договоры As Дог Where   Дог.ParentExt = Конт.Id), // где Конт.IsFolder = 2
|                                          (Договор),СуммаВал) As Рег      
 


  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #11 - 11. Декабря 2006 :: 12:18
Печать  
тогда проще всего: делаем запрос по таблице контриков далее внутреннее соединение по догооврам потом левое соединение с таблицей остатков
т.е.:
Select
Конт.id, 
    Sum(Рег.СуммаВалОстаток)
From $Справочник.Контрагенты as Конт
inner join $Справочник.Договоры As Дог on Дог.ParentExt = Конт.Id
left  join $РегистрОстатки.Покупатели(:ДатаКонца~,,   
,                                       
(Договор),СуммаВал) As Рег on Рег.Договор = Дог.Id
  
Наверх
 
IP записан
 
Baik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 18
Зарегистрирован: 31. Октября 2006
Re: Получение списка элементов группы
Ответ #12 - 11. Декабря 2006 :: 12:39
Печать  
Глянь код в 7-м ответе....
Конт - принадлежит основному запросу
Рег - подзапросу, который в свою очередь является колонкой (переменной) основного запроса ...
  
Наверх
 
IP записан
 
lohmatik
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 06. Сентября 2006
Re: Получение списка элементов группы
Ответ #13 - 14. Декабря 2006 :: 05:41
Печать  
глянул и из того запроса становится понятно что ты ДЛЯ КАЖДОГО Контр.id
делаешь запрос к остаткам.
потому основываясь на существующих данных проще сделать левое соединение к основному запросу. то что у тебя там написано top1 вообще ненужно ибо у тебя есть
SUM(...) и нет предложения Group by.
может покажешь полностью ВЕСЬ запрос?

« Последняя редакция: 14. Декабря 2006 :: 07:02 - lohmatik »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать