четверг, 1 января 2009 г.

ИМЕЮЩИЕ / HAVING

Обнаружил еще одно отличие синтаксиса запросов 1С от синтаксиса SQL, в в редко используемой конструкции ИМЕЮЩИЕ.

Предложение ИМЕЮЩИЕ позволяет накладывать условия на значения агрегатных функций. В других конструкциях языка запросов, например, в предложении ГДЕ, использовать агрегатные функции в условиях нельзя. В условии отбора ИМЕЮЩИЕ можно использовать только агрегатные функции и поля, по которым осуществляется группировка.

В синтаксисе запросов 1С нельзя указывать псевдоним поля, в этой конструкции.

ВЫБРАТЬ
РеализацияТоваровуслугТовары.Номенклатура,
СУММА(РеализацияТоваровуслугТовары.Количество) КАК Продано
ИЗ
Документ.РеализацияТоваровУслуг.Товары
КАК РеализацияТоваровуслугТовары
СГРУППИРОВАТЬ ПО
РеализацияТоваровуслугТовары.Номенклатура
ИМЕЮЩИЕ
СУММА(РеализацияТоваровуслугТовары.Количество) >= 70

Ну а соответственно в SQL можно, что очень удобно, поскольку у агрегатного поля всегда есть псевдоним.

Вот пример запроса на SQL.

SELECT
Fld16131,
Fld16132,
SUM(Fld16134) AS Fld16134Turnover
FROM AccumReg16128
WHERE Active
GROUP BY Fld16131, Fld16132
HAVING Fld16134Turnover <> 0