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


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Проблема с итогами по группировкам
21. Июля 2010 :: 10:09
Печать  
Для меня довольно распространенная ситуация - отчет с n динамичными группировками (когда их минимум одна, но может быть сколько угодно и в любом порядке), причем итоги сверху.
В семерке это реализовано шикарно, зато остальное плохо, поэтому приходится писать на SQL.
Так вот, меня мучает одна проблема.
Допустим, у нас идет группировка по Товару. У товара тип - Справочник.Номенклатура. У него есть реквизит Модель.
Проблема в том, что надо вывести группировку по товару, но упорядочить по модели. А группировка нужна только по товару (ну еще по n реквизитам, но не по модели, т.к. модель это товар).
Вот тут я уперлась в тупик.
Order by я могу использовать только если в группировке укажу модель. При этом в group by мне тоже ее надо указывать. Если я делаю итоги по группировкам (WITH ROLLUP), то у меня идут итоги по всем группировкам отчета, то бишь и по модели тоже. В результате итоги дублируются и ТЗ получается в n раз больше, что сильно замедляет отчет.
Из запроса с упорядочиванием сделать еще один подзапрос не позволяет сам синтаксис.
В общем, тут я попала в тупик - как быть. Можно конечно потом с помощью самой 1ски отсортировать табличку по модели, но это сильно замедляет отчет.
А таких отчетов у меня много, есть ли какой-нибудь выход?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с итогами по группировкам
Ответ #1 - 21. Июля 2010 :: 10:32
Печать  
В GROUP BY оставляй только товар, а в секции SELECT делай MAX(Модель)
(если я тебя правильно понял)
  
Наверх
 
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Проблема с итогами по группировкам
Ответ #2 - 21. Июля 2010 :: 12:21
Печать  
Неа, не вышло - запрос не ругнулся, но результат тот же (потому что одному товару соответствует одна модель, надо именно товары отсортировать по модели)
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с итогами по группировкам
Ответ #3 - 21. Июля 2010 :: 12:51
Печать  
в Order by "Модель" вставила?
Можно, в принципе, группировать по модели и сортировать по модели, а товар делать как MAX(Товар).

Покажи запрос
  
Наверх
 
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Проблема с итогами по группировкам
Ответ #4 - 21. Июля 2010 :: 13:04
Печать  
Он у меня сильно динамичный, поэтому в коде ногу сломишь. Улыбка
Покажу пример для двух группировок - Производитель и Товар.

SELECT 
СпрТов.SP3500 [Производитель $Справочник.Производитель], MainTab2.SP6886 [Товар1 $Справочник.Номенклатура],
SUM(Kol1) Kol1, SUM(Seb1) Seb1, SUM(ST1) ST1, 
MAX(СпрТов.SP4385) Модель,
GROUPING (СпрТов.SP3500) as Группа1,
GROUPING (MainTab2.SP6886) as Группа2
FROM               
(SELECT SP6886, SP6888,
SUM(Kol1) Kol1, SUM(Seb1) Seb1, SUM(ST1) ST1
FROM
(SELECT SP6886, SP6888,
CASE WHEN DATE_TIME_IDDOC BETWEEN :НачДата1 AND :КонДата1~ THEN SP6889 ELSE 0 END Kol1,
CASE WHEN DATE_TIME_IDDOC BETWEEN :НачДата1 AND :КонДата1~ THEN SP6890 ELSE 0 END ST1,
CASE WHEN DATE_TIME_IDDOC BETWEEN :НачДата1 AND :КонДата1~ THEN SP6891 ELSE 0 END Seb1,
IDDOC
FROM $Регистр.УчетПродажОб AS РегПрод
WHERE (РегПрод.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)) AS MainTab
GROUP BY SP6886, SP6888) AS MainTab2
INNER JOIN SC33 СпрТов ON MainTab2.SP6886 = СпрТов.ID
WHERE (СпрТов.SP3500  = :ВыбПроизводитель) GROUP BY СпрТов.SP3500,
MainTab2.SP6886 WITH ROLLUP

P.S. извращаться приходится, т.к. очень много динамичных группировок + по горизонтали выводится периодика (n произвольных периодов)
  
Наверх
ICQ  
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Проблема с итогами по группировкам
Ответ #5 - 21. Июля 2010 :: 13:07
Печать  
JohnyDeath писал(а) 21. Июля 2010 :: 12:51:
в Order by "Модель" вставила?

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