Группировка по полю с case'ом в IB7.5
Группировка по полю с case'ом в IB7.5
Есть запрос, в котором есть поля, вычисляемые case-ом
Напр
select dh.docindex, case when (dh.DOCKIND=1 and CLIENT2_INDEX=1444) or (dh.DOCKIND=2 and CLIENT_INDEX=1444) then -1*ds.QUANTITY else ds.QUANTITY end as Qnt, sum(ps.quantity)
from DOCSPEC ds
left join DOCHEAD dh on ds.ID_DOCHEAD=dh.ID_DOCHEAD
left join partspec ps on ps.articul=ds.articul and ds.id_dochead=ps.dochead
where ...
group by dh.docindex, ????
Нужно сгруппировать и посчитать сумму. Что указать в group by?
В Firebird-e в этом плане все отлично - можно указать номер поля и все (group by 1,2)
Пробовал и псевдоним ставить (Qnt) и весь case и поля из case.
Больше пользуюсь FB. Подскажите, кто знает как в IB сие реализуется?
Напр
select dh.docindex, case when (dh.DOCKIND=1 and CLIENT2_INDEX=1444) or (dh.DOCKIND=2 and CLIENT_INDEX=1444) then -1*ds.QUANTITY else ds.QUANTITY end as Qnt, sum(ps.quantity)
from DOCSPEC ds
left join DOCHEAD dh on ds.ID_DOCHEAD=dh.ID_DOCHEAD
left join partspec ps on ps.articul=ds.articul and ds.id_dochead=ps.dochead
where ...
group by dh.docindex, ????
Нужно сгруппировать и посчитать сумму. Что указать в group by?
В Firebird-e в этом плане все отлично - можно указать номер поля и все (group by 1,2)
Пробовал и псевдоним ставить (Qnt) и весь case и поля из case.
Больше пользуюсь FB. Подскажите, кто знает как в IB сие реализуется?
Не нужно. Да и не в этом вопрос.Esperito писал(а):ds.QUANTITY не нужно суммировать?
Пока обошел проблему так:
select ds.id_dochead, ds.articul, max( case when (dh.DOCKIND=1 and CLIENT2_INDEX=1444) or (dh.DOCKIND=2 and CLIENT_INDEX=1444) then -1*ds.QUANTITY else ds.QUANTITY end) as Qnt, sum(ps.quantity)
from DOCSPEC ds
left join DOCHEAD dh on ds.ID_DOCHEAD=dh.ID_DOCHEAD
left join partspec ps on ps.articul=ds.articul and ds.id_dochead=ps.dochead
where ...
group by ds.id_dochead, ds.articul
т.е убрал это поле с case-ом из гуппировки, а т.к. оно в группе все равно будет одинаковым, то можно прилепить на него max, min или avg, они все равно его не изменят. Работает, но все равно хотелось бы узнать как такие поля в group by добавляются. Вопрос открыт.
А может: group by dh.docindex, Qntselect dh.docindex, case when (dh.DOCKIND=1 and CLIENT2_INDEX=1444) or (dh.DOCKIND=2 and CLIENT_INDEX=1444) then -1*ds.QUANTITY else ds.QUANTITY end as Qnt, sum(ps.quantity)
from DOCSPEC ds
left join DOCHEAD dh on ds.ID_DOCHEAD=dh.ID_DOCHEAD
left join partspec ps on ps.articul=ds.articul and ds.id_dochead=ps.dochead
where ...
group by dh.docindex, ????
Re: Группировка по полю с case'ом в IB7.5
Пробовал уже все...veart писал(а): Пробовал и псевдоним ставить (Qnt) и весь case и поля из case.
Странно что никто не сталкивался... Не думаю что такое не реализовано. Если даже в бесплатном файрберде все это уже есть...
Re: Группировка по полю с case'ом в IB7.5
а зря...veart писал(а):Не думаю что такое не реализовано