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


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 03. Мая 2007
группировка в запросе
17. Октября 2008 :: 09:15
Печать  
Всем привет.
Есть запрос:
|SELECT  
|
|      CASE GROUPING(Рег.sp791)
|            WHEN 1 THEN '-=TOTAL=-'
|            ELSE Рег.sp791
|      END AS [Агент $Справочник.Агенты],      
|      CASE GROUPING(Рег.sp644)
|            WHEN 1 THEN '-=TOTAL=-'
|            ELSE Рег.sp644
|      END AS [Клиент $Справочник.Контрагенты],            
|      sum(Рег.sp6447) as Сумма
|FROM
|      rg6439 as Рег
|WHERE
|      (Рег.period between :НачДата~~ and :КонДата~~ )";
|GROUP BY
|      Рег.sp7913 ,  
|      Рег.sp6442 WITH ROLLUP  
При выполнении запроса, происходит группировка с итогами внизу по каждому Агенту(sp791) и общая группировка.
Если вставить  orber by то итоги поднимаются вверх, а сортировка не происходит. Подскажите,плз, что я делаю не так.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: группировка в запросе
Ответ #1 - 17. Октября 2008 :: 09:23
Печать  
Давно как-то видимо также сталкивалсо, т.к. нашел у себя след. код:

Код
Выбрать все
Функция СформироватьСтрокуСортировки()
	СтрокаСортировки	= "";

	Для Сч = 1 по СписокГруппировок.РазмерСписка() Цикл
		Название = СписокГруппировок.ПолучитьЗначение(Сч);

		СтрокаСортировки = СтрокаСортировки + "-Итог" + Название + ", " + Название + ", ";
	КонецЦикла;

	Возврат Лев(СтрокаСортировки, СтрДлина(СтрокаСортировки) - 2);
КонецФункции // СформироватьСтрокуСортировки()

......

СтрокаСортировки = СформироватьСтрокуСортировки();
ТЗ.Сортировать(СтрокаСортировки);

 

  

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


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 03. Мая 2007
Re: группировка в запросе
Ответ #2 - 17. Октября 2008 :: 09:30
Печать  
Хотелось бы средствами sql...
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: группировка в запросе
Ответ #3 - 17. Октября 2008 :: 09:30
Печать  
Можно еще наверное выкрутиться с помощью временной таблицы или влож. запроса

  

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: группировка в запросе
Ответ #4 - 17. Октября 2008 :: 10:13
Печать  
Trasher писал(а) 17. Октября 2008 :: 09:15:
Всем привет.
Есть запрос:
|SELECT  
|
|      CASE GROUPING(Рег.sp791)
|            WHEN 1 THEN '-=TOTAL=-'
|            ELSE Рег.sp791
|      END AS [Агент $Справочник.Агенты],      
|      CASE GROUPING(Рег.sp644)
|            WHEN 1 THEN '-=TOTAL=-'
|            ELSE Рег.sp644
|      END AS [Клиент $Справочник.Контрагенты],            
|      sum(Рег.sp6447) as Сумма
|FROM
|      rg6439 as Рег
|WHERE
|      (Рег.period between :НачДата~~ and :КонДата~~ )";
|GROUP BY
|      Рег.sp7913 ,  
|      Рег.sp6442 WITH ROLLUP  
При выполнении запроса, происходит группировка с итогами внизу по каждому Агенту(sp791) и общая группировка.
Если вставить  orber by то итоги поднимаются вверх, а сортировка не происходит. Подскажите,плз, что я делаю не так.

Рег.sp791 - это у тебя ссылка, которая превратится в строку только в 1С-ке, поэтому "   456  " - всегда в сортировке выше чем "-=ТОТАЛ=-", хотя видишь ты "ОАО Рога и копыта". Вывод - соединять с таблицами справочников, откуда вытаскивать DESCR, и сортировать по этому полю.
  
Наверх
ICQ  
IP записан
 
Trasher
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 03. Мая 2007
Re: группировка в запросе
Ответ #5 - 17. Октября 2008 :: 10:24
Печать  
спс за совет, попробую
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: группировка в запросе
Ответ #6 - 20. Октября 2008 :: 13:20
Печать  
Для групп вверху:
Код
Выбрать все
|SELECT
|
|	CASE GROUPING(Рег.sp791)
|		WHEN 1 THEN '-=TOTAL=-'
|		ELSE Рег.sp791
|	END AS [Агент $Справочник.Агенты],
|	CASE GROUPING(Рег.sp644)
|		WHEN 1 THEN '-=TOTAL=-'
|		ELSE Рег.sp644
|	END AS [Клиент $Справочник.Контрагенты],
|	   NULL(СпрКонтр.DESCR,'') AS Сорт,
|	sum(Рег.sp6447) as Сумма
|FROM
|	rg6439 as Рег,
|	   LEFT OUTER JOIN $Справочник.Агенты AS СпрАгент ON (СпрАгент.ID = Рег.sp791)
|	   LEFT OUTER JOIN $Справочник.Контрагенты AS СпрКонтр ON (СпрКонтр.ID = Рег.sp644)
|WHERE
|	(Рег.period between :НачДата~~ and :КонДата~~ )";
|GROUP BY
|	Рег.sp7913 ,
|	Рег.sp6442,
|	NULL(СпрКонтр.DESCR,'')
|	   WITH ROLLUP
|ORDER BY
|	   NULL(СпрКонтр.DESCR,'')
 

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