Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как наложить условие на группу в SQL запросе? (число прочтений - 3072 )
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Как наложить условие на группу в SQL запросе?
03. Января 2008 :: 12:43
Печать  
Подкиньте, п-ста, идейку, как вот тут сделать ограничение, чтобы выводились товары по определенной группе  Озадачен (не используя операторы 1СРР, только SQL):

|select
|rg488_vt.sp489 as Товар,
|rg488_vt.sp490 as Склад,
|sum(rg488_vt.sp493) as ОстатокТовара,
|sum(rg488_vt.sp492) as ВалютнаяСтоимость
|from rg488 as rg488 (nolock)
|where rg488_vt.period={d '2008-01-01'}
|group by
|rg488_vt.sp489,
|rg488_vt.sp490
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как наложить условие на группу в SQL запросе?
Ответ #1 - 03. Января 2008 :: 12:48
Печать  
Мот где-то так, но это только непосредственный родитель Улыбка
Иначе как-то надо через временную таблицу что ли...

Код
Выбрать все
left join sc444 СправочникНоменклатура on СправочникНоменклатура.id =  rg488_vt.sp489
...
where СправочникНоменклатура.parentext = '     1   '
 


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Как наложить условие на группу в SQL запросе?
Ответ #2 - 03. Января 2008 :: 13:11
Печать  
В принципе, результат то получается, но очень долго.

Интересно, каким алгоритмом метод УстановитьТекстовыйПараметр формирует виртуальную таблицу...  Круглые глаза
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Как наложить условие на группу в SQL запросе?
Ответ #3 - 03. Января 2008 :: 13:43
Печать  
ну пожалуй, насколько я помню именно
Код
Выбрать все
УстановитьТекстовыйПараметр() 


не создает виртуальную таблицу.
Создает виртуальную таблицу метод
Код
Выбрать все
УложитьСписокОбъектов() 

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


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как наложить условие на группу в SQL запросе?
Ответ #4 - 03. Января 2008 :: 14:46
Печать  
>>но очень долго.
Реально много итогов? Или просто ТЗ или отчет выводишь на экран, обычно это долго Улыбка
На больших объемах уложение лучше не юзать - тормозит очень
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Как наложить условие на группу в SQL запросе?
Ответ #5 - 08. Января 2008 :: 07:52
Печать  
> не создает виртуальную таблицу.
Создает виртуальную таблицу метод

- Ну да, я имел в виду УложитьСписокОбъектов(), не попал малясь  Смех

> но очень долго.

- Я без ВТ таблицы делал, пробовал что-то типа: WHERE Рег.Товар IN (select ID from (select...)). Результат выдает правильный, но долго очень делает.

Вот и интересно, как это помощью ВТ можно сделать. С учетом того, что 4-уровневая стр-ра справочника, и надо брать все вложенные элементы, а не только по непосредственному родителю.

Как вообще на SQL делают такие ограничения, должны же быть какие-то эффективные способы? Чтобы все быстро крутилось ...
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Как наложить условие на группу в SQL запросе?
Ответ #6 - 08. Января 2008 :: 07:53
Печать  
А делал я непосредственно в Query Analyser  Класс
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как наложить условие на группу в SQL запросе?
Ответ #7 - 08. Января 2008 :: 09:36
Печать  
Ну дык позырь профайлером
Если что-то очень нужное и ценное - имеет смысл отказаться от групп в пользу реквизита
Неготично тысячи элементов укладывать
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как наложить условие на группу в SQL запросе?
Ответ #8 - 08. Января 2008 :: 09:54
Печать  
А вот статейка:  http://www.citforum.ru/database/articles/tree.shtml
и готовые триггера под это дело в http://www.1cpp.ru/forum/YaBB.pl?num=1153469047
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Как наложить условие на группу в SQL запросе?
Ответ #9 - 29. Января 2008 :: 06:33
Печать  
>>> УложитьСписокОбъектов()

- Полазил в профайлере, короче, выяснил, как ВТ для отбора по группе формируется. Может, кому-нить пригодится.

Вначале определяем ID той группы, по которой будем делать фильтр.

Далее так:

--------------------------------------------------------------------

if exists(select * from tempdb..sysobjects where id = object_id('tempdb..#ГруппаТов'))
drop table #ГруппаТов
create table #ГруппаТов (val char(9), isfolder tinyint, primary key clustered (val))


insert #ГруппаТов values (ID, 2)

set nocount on

update #ГруппаТов set isfolder = 1 from #ГруппаТов
inner join sc37 as ref (nolock) on ref.id = #ГруппаТов.val where ref.isfolder = 1

declare @folders table(val char(9), primary key clustered (val))

while 1=1
              
begin

insert into @folders select val from #ГруппаТов where isfolder = 1
if @@rowcount = 0 break

insert into #ГруппаТов select id, isfolder from sc37 (nolock)
where parentid in ( select val from @folders ) and id not in (select val from #ГруппаТов )
delete #ГруппаТов where val in ( select val from @folders )
delete @folders

end

---------------------------------------------------------------------

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