Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как оптимальней упорядочить (ORDER BY) ? (число прочтений - 3293 )
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Как оптимальней упорядочить (ORDER BY) ?
26. Августа 2007 :: 18:04
Печать  
Чтоб не нагружать лишней информацией, возьмем простой справочник и простой запрос:

===

справочник "Номенклатура": Код, Наименование, реквизит "Количественный" тип "Число"


=== текст запроса

Код
Выбрать все
|SELECT
|	СпрНом.ID as [Номенклатура $Справочник.Номенклатура],
|	SUM($СпрНом.Количественный) as Количественный
|FROM
|   $Справочник.Номенклатура as СпрНом
|GROUP BY  
|	СпрНом.ID
|ORDER BY СпрНом.ID
 



=== задача
Хочется группировать по СпрНом.ID , но сортировать по СпрНом.Descr (по наименованию), т.е. вместо "|ORDER BY СпрНом.ID" нужно бы "|ORDER BY СпрНом.Descr", но не работает.
Вопрос: как оптимальней реализовать?
Можно, конечно, группировать по наименованию, но возникает потенциальная опасность - теоретически могут быть два одинаковых наименования, имеющих разные ID.
Подскажите, у кого какие идеи?
Заранее спасибо.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #1 - 26. Августа 2007 :: 19:06
Печать  
ID - поле уникальное, есть ли смысл по нему группировать?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #2 - 26. Августа 2007 :: 20:16
Печать  
Присоединяюсь.
Секцию "GROUP BY" убери и сортируй как хочешь. (и функцию SUM соответственно)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #3 - 27. Августа 2007 :: 06:48
Печать  
wolfsoft писал(а) 26. Августа 2007 :: 18:04:
Можно, конечно, группировать по наименованию, но возникает потенциальная опасность - теоретически могут быть два одинаковых наименования, имеющих разные ID.


Можно группировать одновременно по ИД и Наименованию.
ЗЫ. Не догадалси?  Подмигивание
  

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


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #4 - 27. Августа 2007 :: 16:26
Печать  
Господа, видимо не понятно выразился. Задача и запрос абстрактные, если я выложу весь запрос, то придется долго и упорно комментировать его. Задачу упростил специально, чтоб было понятней.
--
То, что можно группировать и по наименованию, и по ID - это понятно, очевидное решение "в лоб", как говорится, но не красиво, ибо неудобно в дальнейшей обработке.
--
В реальности - это запрос по регистрам в самописной конфе (не моей), если брать аналогию с ТиС, то в нем есть регистр остатков с измерением "Партия", а отчет по остаткам нужно группировать по "номенклатуре", для чего приходится связывать регистр через измерение "Партия" со справочником "Номенклатура", потом соответственно группировать по номенклатуре и выводить с итогами по фирме, складу и т.д. и т.п.
Если просто сгруппировать по ID и Наименованию, то запрос неудобен в обработке.
--
Другие идеи есть?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #5 - 27. Августа 2007 :: 16:37
Печать  
Цитата:
В реальности - это запрос по регистрам в самописной конфе (не моей), если брать аналогию с ТиС, то в нем есть регистр остатков с измерением "Партия", а отчет по остаткам нужно группировать по "номенклатуре", для чего приходится связывать регистр через измерение "Партия" со справочником "Номенклатура", потом соответственно группировать по номенклатуре и выводить с итогами по фирме, складу и т.д. и т.п.

Замечание: чтобы сгруппировать по номенклатуре вовсе не надо цеплять сам справочник Номенклатура.

Решение тривиальное, оно же самое оптимальное: к полезной выборке цепляем левой связью справочник по ID, и упорядочиваем по наименованию и по ID (чтобы был однозначный порядок при одинаковых наименованиях).
  
Наверх
ICQ  
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #6 - 27. Августа 2007 :: 18:31
Печать  
Цитата:
Замечание: чтобы сгруппировать по номенклатуре вовсе не надо цеплять сам справочник Номенклатура.

Решение тривиальное, оно же самое оптимальное: к полезной выборке цепляем левой связью справочник...


Так все-таки "цепляем" или не "цепляем"? Подмигивание

справочники
----------------------------------------
Номенклатура     |        Партия   
----------------------------------------
Номенклатура1   ->      Партия1 
Номенклатура1   ->      Партия2 
Номенклатура2   ->      Партия3 
Номенклатура2   ->      Партия4 

регистр остатков
----------------------------------------------------
Партия      Остаток
----------------------------------------------------
Партия1        1
Партия2        2
Партия3        3
Партия4        4

Если не трудно, можно простенький пример запроса по этим данным?
Нужно получить в отчете
----------------------------------------------------
Номенклатура      Остаток
----------------------------------------------------
Номенклатура1        3    (т.е. 1+2)
Номенклатура2        7    (т.е. 3+4)

Спасибо за ответы! Улыбка
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #7 - 27. Августа 2007 :: 20:06
Печать  
Чтобы СГРУППИРОВАТЬ - не надо цеплять,
чтобы УПОРЯДОЧИТЬ - цепляем левой связью справочник

Есть разница? Улыбка

Свой исходный запрос оформляешь как подзапрос к нему цепляешь
Код
Выбрать все
SELECT
...
FROM (
.....
) as МОЙ_Подзапрос

LEFT JOIN $Справочник.Номенклатура as СпрНом ON СпрНом.ID=МОЙ_Подзапрос.ID
ORDER BY СпрНом.Descr,СпрНом.ID
 



В скобочки вставляешь свой исходный запрос.
  
Наверх
 
IP записан
 
wolfsoft
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 26. Августа 2007
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #8 - 28. Августа 2007 :: 06:05
Печать  
Огромное спасибо! Просветили балбеса!
Я знал, что "ларчик" должен "просто открываться"! Улыбка
Совсем отупел на 1с-совских запросах, никак не могу обратно на нормальный SQL перестроится Печаль
Пойду пробовать Улыбка
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Как оптимальней упорядочить (ORDER BY) ?
Ответ #9 - 29. Августа 2007 :: 14:04
Печать  
А вот так не прокатит?
Код
Выбрать все
|SELECT
|	СпрНом.ID as [Номенклатура $Справочник.Номенклатура],
|	SUM($СпрНом.Количественный) as Количественный
|FROM
|   $Справочник.Номенклатура as СпрНом
|GROUP BY  
|	СпрНом.ID
|ORDER BY MAX(СпрНом.DESCR)
 

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