Доброго времени суток!
TO "S.H.S"
Ну зачем Вам группировать по 1,2,3,4,5,6,9,10,11,12,13? -
естественно, будет тормозить.
В предположении, что g.goods_id - первичный ключ, а каждый товар
принадлежит не более одной категории, я бы написал следующее
Код: Выделить всё
select b.goods_id,min(g.name),
min(c.category),
SUM(iif((b.beznal=0 AND b1.war_base_id IS NULL), 1, 0)),
SUM(iif((b.beznal=1 AND b1.war_base_id IS NULL), 1, 0)),
min((ROUND((g.price-g.price/100*g.discount_pr)/100))*100),
min(g.discount_pr),
min(g.color_sell),
min(g.price),
min(g.warranty),
min(c.category ||' '|| g.name) as fullname,
min(c.category_id)
from base b left join base b1
ON b1.war_base_id=b.base_id
inner join goods g
ON b.goods_id=g.goods_id
inner join category c
ON c.category_id=g.category_id
where b.sell_date IS NULL
AND b.warranty_date IS NULL
AND b.del_date IS NULL
AND b.reserved_id IS NULL
AND g.inprice=1
group by b.goods_id
union all
select g.goods_id,min(g.name),
min(c.category),
CAST(0 AS INTEGER),
CAST(0 AS INTEGER),
min((ROUND((g.price-g.price/100*g.discount_pr)/100))*100),
min(g.discount_pr),
min(g.color_sell),
min(g.price),
min(g.warranty),
min(c.category ||' '|| g.name) as fullname,
min(c.category_id)
from goods g inner join category c
ON c.category_id=g.category_id
LEFT JOIN base b
ON b.goods_id=g.goods_id
AND b.sell_date IS NULL
AND b.warranty_date IS NULL
AND b.del_date IS NULL
AND b.reserved_id IS NULL
where g.inprice=1 and b.goods_id IS NULL
group by g.goods_id
order by 2,3
Запрос может быть ошибочным, но основная идея
ясна - вынести связку base left join base в начало плана.
Кстати IIF - Yaffil или FB2?