Имя: Пароль:
1C
1C 7.7
v7: 1sqlite. Не всегда срабатывает GROUP BY
0 Перелетный косяк
 
17.07.12
08:59
База 7.7, DBF, Самописка, компонента ОперУчет
1cpp 3.2.2.0, 1sqlite 1.0.2.4

Прямой запрос, считает количество строк, штук, номенклатурных групп и т.д. в документах:

SELECT                          
'20'||substr(ДР.ВремяСборки, 7, 2)||substr(ДР.ВремяСборки, 4, 2)||substr(ДР.ВремяСборки, 1, 2) as [Дата :Дата],
ДР.Отправитель  as [Склад :Справочник.Склады],        
ДР.Сборщик  as [Сборщик :Справочник.Сотрудники],
ДРС.iddoc  as [Док :Документ.ПеремещениеТМЦ],
COUNT(DISTINCT ДРС.iddoc) as КолНакладных,
COUNT(DISTINCT ДРС.Номенклатура) as КолСтрокНакладной,
COUNT(DISTINCT Ном.ParentID) as КолГрупп,
SUM (ДРС.Количество) as [КолШтук :Число.15.2],
SUM (ДРС.Сумма) as [Сумма :Число.15.2]
FROM
[ДокументСтроки.ПеремещениеТМЦ] as ДРС inner join [Справочник.Номенклатура] as Ном
on ДРС.Номенклатура = Ном.id  
inner join [Документ.ПеремещениеТМЦ] as ДР
on ДРС.iddoc = ДР.iddoc
WHERE  
ДРС.iddoc in (SELECT Val From ВыбСписокЖокументов)
GROUP BY ДРС.iddoc

Иногда GROUP BY ДРС.iddoc срабатывает и таблица сворачивается, иногда нет

.Отладка() показывает одно и то же. По крайней мере я отличий не нашел

1)Вот при НЕПРАВИЛЬНОЙ РАБОТЕ запроса.

Подбор индекса для таблицы DT766:
   Ограничения: SP757[Номенклатура]=; IDDOC=;
   Упорядочить: IDDOC,
   Найдено в кэше
   Выбран индекс IDLINE: IDDOC+STR(LINENO,4)
   Попадает в сортировку
   Стоимость: 18
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы DT766:
   Ограничения:
   Упорядочить: IDDOC,
   Найдено в кэше
   Выбран индекс IDLINE: IDDOC+STR(LINENO,4)
   Попадает в сортировку
   Стоимость: 36
Подбор индекса для таблицы SC56:
   Ограничения:
   Найдено в кэше
   Индекс не выбран.
   Стоимость: 9984
Подбор индекса для таблицы DH766:
   Ограничения:
   Найдено в кэше
   Индекс не выбран.
   Стоимость: 9986
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16


2)
Вот при ПРАВИЛЬНОЙ РАБОТЕ запроса.
Подбор индекса для таблицы DT766:
   Ограничения: SP757[Номенклатура]=; IDDOC=;
   Упорядочить: IDDOC,
   Найдено в кэше
   Выбран индекс IDLINE: IDDOC+STR(LINENO,4)
   Попадает в сортировку
   Стоимость: 18
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы DT766:
   Ограничения:
   Упорядочить: IDDOC,
   Найдено в кэше
   Выбран индекс IDLINE: IDDOC+STR(LINENO,4)
   Попадает в сортировку
   Стоимость: 36
Подбор индекса для таблицы SC56:
   Ограничения:
   Найдено в кэше
   Индекс не выбран.
   Стоимость: 9984
Подбор индекса для таблицы DH766:
   Ограничения:
   Найдено в кэше
   Индекс не выбран.
   Стоимость: 9986
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы DH766:
   Ограничения: IDDOC=;
   Найдено в кэше
   Выбран индекс ID: IDDOC
   Стоимость: 14
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
Подбор индекса для таблицы SC56:
   Ограничения: ID=;
   Найдено в кэше
   Выбран индекс IDD: ID
   Стоимость: 16
1 Ёпрст
 
17.07.12
09:02
Если че, в GROUP BY нужно перечислять всё, что в селект листе.. скажи спасибо, что sqllite не ругается при этом
2 Ёпрст
 
17.07.12
09:03
+ нафига так извратно дату типизировать ?
3 Перелетный косяк
 
17.07.12
09:07
(1) Может, лучше бы ругался
т.е. GROUP BY
'20'||substr(ДР.ВремяСборки, 7, 2)||substr(ДР.ВремяСборки, 4, 2)||substr(ДР.ВремяСборки, 1, 2),
ДР.Отправитель,        
ДР.Сборщик,
ДРС.iddoc,
COUNT(DISTINCT ДРС.iddoc),
COUNT(DISTINCT ДРС.Номенклатура),
COUNT(DISTINCT Ном.ParentID),
SUM (ДРС.Количество),
SUM (ДРС.Сумма) - ?? некрасиво блин

(2) дата записывается коряво в текстовой строке ((, а нужно из строки вытащить дату-день
4 Ёпрст
 
17.07.12
09:09
(3) ёпт..
Всё кроме агрегатных функций!
5 Перелетный косяк
 
17.07.12
09:14
(4) стало стыдно(

спасибо, теперь заводится
2 + 2 = 3.9999999999999999999999999999999...