Группировка в запросе

1. Gang031 02.12.16 00:23 Сейчас в теме
Доброго времени суток!
В результате запроса получаю вот такую таблицу:


Подскажите, как сгруппировать по первой колонке? сначала думал в конструкторе запроса на вкладке "группировка" это сделать, но ведь два следующих поля имеют не числовой тип данных.
Заранее спасибо!
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alxarz 31 02.12.16 00:56 Сейчас в теме
наверное нужно смотреть запрос, в результате которого получаете такую таблицу, а не придумывать как свернуть уже полученную. Поэтому, может сам запрос ещё приведёте...
+
4. Gang031 02.12.16 08:34 Сейчас в теме
(2) Эта таблица в отладчике, которую я получаю из запроса
+
3. lefthander 02.12.16 08:28 Сейчас в теме
Сделать объединение двух запросов , выходными полями будет в одном горячая вода, в другом холодная, тогда все будет в одной строке
+
6. Gang031 02.12.16 08:36 Сейчас в теме
(3)
ВЫБРАТЬ
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект КАК Объект,
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик КАК Счетчик
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
 РегистрСведений.КВП_ЗакрепленныеСчетчики.СрезПоследних(, ) КАК КВП_ЗакрепленныеСчетчикиСрезПоследних
ГДЕ
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Действует = ИСТИНА
 И НЕ КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик.Наименование ПОДОБНО "%Электро%"

СГРУППИРОВАТЬ ПО
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект,
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВременнаяТаблица.Объект,
 ВременнаяТаблица.Счетчик КАК ГорячаяВода,
 0 КАК ХолоднаяВода
ПОМЕСТИТЬ Вода
ИЗ
 ВременнаяТаблица КАК ВременнаяТаблица
ГДЕ
 ВременнаяТаблица.Счетчик.Наименование ПОДОБНО "%Холодная%"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ГорячаяВода.Объект,
 0,
 ГорячаяВода.Счетчик
ИЗ
 ВременнаяТаблица КАК ГорячаяВода
ГДЕ
 ГорячаяВода.Счетчик.Наименование ПОДОБНО "%Горячая%"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 Вода.Объект КАК Объект,
 Вода.ГорячаяВода КАК ГорячаяВода,
 Вода.ХолоднаяВода КАК ХолоднаяВода
ИЗ
 Вода КАК Вода

УПОРЯДОЧИТЬ ПО
 Объект
Показать



вот запрос. объединения я уже сделал, но как убрать нули?
+
7. NeviD 02.12.16 09:11 Сейчас в теме
(6) Сделай не объединением, а полным соединением.
+
12. akR00b 22 02.12.16 14:20 Сейчас в теме
(6) Запрос Вашу проблему не решает, но работать должен оптимальнее.

ВЫБРАТЬ
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект КАК Объект,
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик КАК Счетчик,
 ПРЕДСТАВЛЕНИЕ(КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик) КАК Наименование,
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
 РегистрСведений.КВП_ЗакрепленныеСчетчики.СрезПоследних(,Действует = ИСТИНА И Счетчик.Наименование ПОДОБНО "%Электро%"  ) КАК КВП_ЗакрепленныеСчетчикиСрезПоследних

СГРУППИРОВАТЬ ПО
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект,
 КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик,
 ПРЕДСТАВЛЕНИЕ(КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик)
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
 ВременнаяТаблица.Объект,
 ВременнаяТаблица.Счетчик КАК ГорячаяВода,
 0 КАК ХолоднаяВода
ПОМЕСТИТЬ Вода
ИЗ
 ВременнаяТаблица КАК ВременнаяТаблица
ГДЕ
 ВременнаяТаблица.Наименование ПОДОБНО "%Холодная%"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ГорячаяВода.Объект,
 0,
 ГорячаяВода.Счетчик
ИЗ
 ВременнаяТаблица КАК ГорячаяВода
ГДЕ
 ГорячаяВода.Наименование ПОДОБНО "%Горячая%"
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
 Вода.Объект КАК Объект,
 Вода.ГорячаяВода КАК ГорячаяВода,
 Вода.ХолоднаяВода КАК ХолоднаяВода
ИЗ
 Вода КАК Вода

УПОРЯДОЧИТЬ ПО
 Объект
Показать
+
5. ImHunter 315 02.12.16 08:35 Сейчас в теме
Смотря что еще собираетесь с результатами запроса делать
+
8. akR00b 22 02.12.16 14:04 Сейчас в теме
На будущее..
1) условия накладывать лучше сразу на виртуальную таблицу
ИЗ
 РегистрСведений.КВП_ЗакрепленныеСчетчики.СрезПоследних(, Действует = ИСТИНА
 И НЕ Счетчик.Наименование ПОДОБНО "%Электро%" ) КАК КВП_ЗакрепленныеСчетчикиСрезПоследних

2)
ИЗ
 ВременнаяТаблица КАК ВременнаяТаблица
ГДЕ
 ВременнаяТаблица.Счетчик.Наименование ПОДОБНО "%Холодная%" // Поле наименование лучше сразу получить в 1м подзапросе через ПРЕДСТАВЛЕНИЕ()
// тоже самое и для "%Горячая%"

работать будет быстрее..
+
9. ImHunter 315 02.12.16 14:09 Сейчас в теме
(8) Специфика всякая бывает. И параметризация ВиртТабл бывает не к месту.
+
10. akR00b 22 02.12.16 14:12 Сейчас в теме
(9)Доброго времени суток, будьте любезны, если Вам не сложно, назовите мне пожалуйста ситуацию когда выборка всей таблицы а потом проход по ней условием продуктивнее нежели получения сразу отобранных данных? тем более с ПОДОБНО.
+
11. ImHunter 315 02.12.16 14:19 Сейчас в теме
(10)
Тут дело не в продуктивности, а в том, по каким критериям нужно получить данные. Если условие накладывается НЕ на измерение, то результаты при параметризации и при применении условия ГДЕ - будут разные.
И, гм, параметризовать таким способом НЕ Счетчик.Наименование ПОДОБНО "%Электро% я бы как-то предостерегся тоже.
+
13. akR00b 22 02.12.16 14:25 Сейчас в теме
(11)
И, гм, параметризовать таким способом НЕ Счетчик.Наименование ПОДОБНО "%Электро% я бы как-то предостерегся тоже.


и в ГДЕ предостерегаться не нужно?
+
15. ImHunter 315 02.12.16 14:31 Сейчас в теме
(13)
Если параметризовать каким-то внятным проиндексированным набором, то есть вероятность, что оптимизатор будет использовать индексы.
А с помощью разыменования, да еще по ПОДОБНО - вы серверу не даете шансов как-то ускориться.
+
16. akR00b 22 02.12.16 14:33 Сейчас в теме
(15)Вы сейчас говорите о том что ПОДОБНО это плохо, я с Вами согласен, но другого предложить нельзя так как мы не знаем специфики, вопрос где ПОДОБНО будет работать быстрее в параметрах или условиях?
+
17. ImHunter 315 02.12.16 14:40 Сейчас в теме
(16) Другое - это формирование врем таблицы счетчиков
+
14. akR00b 22 02.12.16 14:28 Сейчас в теме
(11)
Если условие накладывается НЕ на измерение, то результаты при параметризации и при применении условия ГДЕ - будут разные.

можете разъяснить? количество записей будет разное?
+
18. ImHunter 315 02.12.16 14:47 Сейчас в теме
(14)
Насчет специфики параметризации.
Как писал выше, есть специфика, если параметризовать по реквизиту.
Если так параметризуем (по реквизиту), то замечательно получим себе все последние строки, где выполнялось некое условие для реквизита.
Но по истории потом значение этого реквизита стало другим. И тогда запрос со срезом без параметризации и условием ГДЕ - некоторые найденные выше записи уже не увидит.
+
19. akR00b 22 02.12.16 14:52 Сейчас в теме
(18)
некоторые найденные выше записи уже не увидит.
+
и с параметизацией этих записей не будет.
+
20. ImHunter 315 02.12.16 14:57 Сейчас в теме
21. akR00b 22 02.12.16 15:01 Сейчас в теме
(20)если я правильно понял логику то берем срезпоследних и делаем отбор по реквизиту через параметры и через ГДЕ . ок сейчас попробуем.
+
22. ImHunter 315 02.12.16 15:05 Сейчас в теме
(21)
Такое вот имею в виду. Чтобы нам однозначно понимать.
С парам:
выбрать * из РегистрСрез(, рекв=&Знач)

С ГДЕ
выбрать * Из РегистрСрез() где рекв=&Знач
+
23. akR00b 22 02.12.16 15:16 Сейчас в теме
(22)

ВЫБРАТЬ
	КОЛИЧЕСТВО(*) КАК Количество
ПОМЕСТИТЬ ВТ_ГДЕ
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатуры
ГДЕ
	ЦеныНоменклатуры.Регистратор ССЫЛКА Документ.УстановкаЦенНоменклатуры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(*) КАК Количество1,
	ВТ_ГДЕ.Количество КАК Количество2
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Регистратор ССЫЛКА Документ.УстановкаЦенНоменклатуры) КАК ЦеныНоменклатурыСрезПоследних,
	ВТ_ГДЕ КАК ВТ_ГДЕ
СГРУППИРОВАТЬ ПО 
	ВТ_ГДЕ.Количество
Показать


одинаково.
+
24. ImHunter 315 02.12.16 15:21 Сейчас в теме
(23)
:) Я уже как несколько постов распинаюсь про параметризацию реквизитом. Ну или ресурсом. Без разницы. Главное, чтоб не измерением.
+
26. akR00b 22 02.12.16 15:29 Сейчас в теме
(24)так в чем соль? как и утверждал количество одинаковое только параметизация работает быстрее, проверяем на измерении?
+
29. ImHunter 315 02.12.16 15:47 Сейчас в теме
(26)
Ладно, нарисую на пальцах.
Такой вот набор данных Период-Цена
01.01.2016, 40
02.01.2016, 50
Запрос выбрать * из РегистрСрез(, цена=40) - покажет нам первую запись
Запрос выбрать * из РегистрСрез() где цена=40 - нам ничего не покажет
+
28. akR00b 22 02.12.16 15:40 Сейчас в теме
(24) да, с измерениями пролет, Вы правы, не знал. Хороших выходных)
+
25. ImHunter 315 02.12.16 15:26 Сейчас в теме
(23)
К тому же, такой вар-т накладывания условий - пальцем в небо, может. Другие типы регистраторов вообще - есть в этом регистре?
+
27. akR00b 22 02.12.16 15:34 Сейчас в теме

(25)
Другие типы регистраторов вообще - есть в этом регистре?
а как же.
+
30. igel9780 171 02.12.16 16:01 Сейчас в теме
На одном лицевом счете может быть несколько счётчиков по одной услуге. Тупо стояк ХВС и ГВС в кухне. А так же стояк ХВС и ГВС в санблоке. Вас это не смущает? Как тогда должен работать ваш запрос?

Табличку приведите, пожалуйста.
+
31. igel9780 171 02.12.16 16:04 Сейчас в теме
Да. 901 счет у вас так и есть - по два счетчика. Что должно в итоге получится с 901 счётом?
+
32. Gang031 02.12.16 16:44 Сейчас в теме
(31) в части 901 счета, где есть по два счетчика у одинаковой услуги, нужно так же сгруппировать эти данные, что бы оба эти счетчика были
+
33. igel9780 171 05.12.16 07:20 Сейчас в теме
В таком случае, вам нужно поле, которое будет указывать, какие счётчики показывать на первой позиции, какие на второй и т.д. Это поле можно сделать суррогатным, но тогда порядок счётчиков будет всегда гулять.
+
34. igel9780 171 05.12.16 07:51 Сейчас в теме
Вот запрос с суррогатным ключом сортировки. Но. Во-первых, он медленный. Во-вторых, если вам такой запрос понадобился, значит вы что-то делаете неправильно.

ВЫБРАТЬ
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект КАК Объект,
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик КАК Счетчик,
	МАКСИМУМ(КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик.Код) КАК СчетчикПрофильСортировки
ПОМЕСТИТЬ Врем_ХВС_Исходные
ИЗ
	РегистрСведений.КВП_ЗакрепленныеСчетчики.СрезПоследних(, ) КАК КВП_ЗакрепленныеСчетчикиСрезПоследних
ГДЕ
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Действует = ИСТИНА
	И КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик.Наименование ПОДОБНО "%ХВС%"

СГРУППИРОВАТЬ ПО
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект,
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик

ИНДЕКСИРОВАТЬ ПО
	СчетчикПрофильСортировки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект КАК Объект,
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик КАК Счетчик,
	МАКСИМУМ(КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик.Код) КАК СчетчикПрофильСортировки
ПОМЕСТИТЬ Врем_ГВС_Исходные
ИЗ
	РегистрСведений.КВП_ЗакрепленныеСчетчики.СрезПоследних(, ) КАК КВП_ЗакрепленныеСчетчикиСрезПоследних
ГДЕ
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Действует = ИСТИНА
	И КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик.Наименование ПОДОБНО "%ГВС%"

СГРУППИРОВАТЬ ПО
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Объект,
	КВП_ЗакрепленныеСчетчикиСрезПоследних.Счетчик

ИНДЕКСИРОВАТЬ ПО
	СчетчикПрофильСортировки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Врем_ХВС_Исходные.Объект КАК Объект,
	Врем_ХВС_Исходные.Счетчик,
	КОЛИЧЕСТВО(Врем_ХВС_Исходные.Объект) КАК КлючСортировки
ПОМЕСТИТЬ Врем_ХВС
ИЗ
	Врем_ХВС_Исходные КАК Врем_ХВС_Исходные
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Врем_ХВС_Исходные КАК Суррогат
		ПО Врем_ХВС_Исходные.Объект = Суррогат.Объект
			И Врем_ХВС_Исходные.СчетчикПрофильСортировки >= Суррогат.СчетчикПрофильСортировки

СГРУППИРОВАТЬ ПО
	Врем_ХВС_Исходные.Объект,
	Врем_ХВС_Исходные.Счетчик

ИНДЕКСИРОВАТЬ ПО
	Объект,
	КлючСортировки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Врем_ГВС_Исходные.Объект КАК Объект,
	Врем_ГВС_Исходные.Счетчик,
	КОЛИЧЕСТВО(Врем_ГВС_Исходные.Объект) КАК КлючСортировки
ПОМЕСТИТЬ Врем_ГВС
ИЗ
	Врем_ГВС_Исходные КАК Врем_ГВС_Исходные
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Врем_ГВС_Исходные КАК Суррогат
		ПО Врем_ГВС_Исходные.Объект = Суррогат.Объект
			И Врем_ГВС_Исходные.СчетчикПрофильСортировки >= Суррогат.СчетчикПрофильСортировки

СГРУППИРОВАТЬ ПО
	Врем_ГВС_Исходные.Объект,
	Врем_ГВС_Исходные.Счетчик

ИНДЕКСИРОВАТЬ ПО
	Объект,
	КлючСортировки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЕСТЬNULL(Врем_ГВС.Объект, Врем_ХВС.Объект) КАК Объект,
	ЕСТЬNULL(Врем_ГВС.КлючСортировки, Врем_ХВС.КлючСортировки) КАК КлючСортировки,
	Врем_ГВС.Счетчик КАК СчетчикГВС,
	Врем_ХВС.Счетчик КАК СчетчикХВС
ИЗ
	Врем_ХВС КАК Врем_ХВС
		ПОЛНОЕ СОЕДИНЕНИЕ Врем_ГВС КАК Врем_ГВС
		ПО Врем_ХВС.Объект = Врем_ГВС.Объект
			И Врем_ХВС.КлючСортировки = Врем_ГВС.КлючСортировки

УПОРЯДОЧИТЬ ПО
	Объект,
	ЕСТЬNULL(Врем_ГВС.КлючСортировки, Врем_ХВС.КлючСортировки)
АВТОУПОРЯДОЧИВАНИЕ
Показать
+
35. igel9780 171 05.12.16 07:54 Сейчас в теме
И да. Поменяйте "%ХВС%" и "%ГВС%" в запросе на ваши значения выборки. А то, как обычно, "не работает" скажете.
+
36. ImHunter 315 05.12.16 09:03 Сейчас в теме
Виктор, может, лучше расскажете, что потом с результатами запроса собираетесь делать?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот