Страница 2 из 2

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 08 авг 2017, 21:14
Vitaly
mihalich81 писал(а):Вот мой запрос. Здесь немного сложнее, т.к. в основном цикле обрабатываются продажи, для получения поставщика из закупок пришлось использовать вложенный SELECT. В этом, скорее всего и проблема. Не пойму, почему на двух базах работает, а на моей основной выводит ошибку запроса 104. Боевой базе уже четыре года ежедневного использования. Куча удалений и т.п.
Запрос из отчёта OXETTA.

Код: Выделить всё

SELECT
 goods.id,
 goods.product_code,
 goods.name,
 (SELECT good_groups.name FROM good_groups WHERE goods.group_id=good_groups.id) AS goods_group_name,
 SUM(waybill_items.quantity) AS sold,
 (SELECT SUM(remainder) FROM remainders WHERE good_id=goods.id AND shop_id IN ({shop-ids})) AS remains,
 (SELECT suppliers.name FROM waybill_items, waybills, suppliers WHERE goods.id = waybill_items.goods_id AND waybill_items.waybill_id = waybills.id AND waybills.record_type=1 AND waybills.contractor_id = suppliers.id) AS suppliers_name,

 (1.0 + {percent}.0/100) * SUM(waybill_items.quantity) - 
 (
  SELECT SUM(remainders.remainder - remainders.reserved + remainders.expected - remainders.min_amount)
  FROM remainders
  WHERE good_id=goods.id AND shop_id IN ({shop-ids})
 ) AS forecast
 
FROM
 goods,
 waybill_items,
 waybills
WHERE
 goods.is_deleted=0 AND
 goods.good_type<>1 AND
 waybill_items.goods_id=goods.id AND
 waybill_items.is_deleted=0 AND
 waybills.id=waybill_items.waybill_id AND
 waybills.waybill_date>={today}-{days}*86400 AND
 waybills.waybill_date<={today}+86400 AND
 waybills.record_type=-1 AND
 waybills.is_deleted=0 AND
 waybills.shop_id IN ({shop-ids})
GROUP BY
 1
HAVING
 (1.0 + {percent}.0/100) * SUM(waybill_items.quantity) - 
 (
  SELECT SUM(remainders.remainder - remainders.reserved + remainders.expected - remainders.min_amount)
  FROM remainders
  WHERE good_id=goods.id AND shop_id IN ({shop-ids})
 ) > 0.01
ORDER BY
 3
Подобный разбор запросов, по чему что не работает, уже подходит под платную техподдержку.
Если запрос из шаблона самой Тирики, значит он работает, тогда в чем проблема?
Не понятно.

P.S. мельком пробежаться по запросу осилил все таки.
Замечаний куча.
Самое огромное: это некорректное написание запроса. Вам бы фарберд 3.0, он бы сразу выплюнул этот запрос... фарберд 2.5 скушает, но не весь, а с частичным исправлением все же.

Приводите запрос в порядок, как положено, в соответствии с правилами sql.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 09 авг 2017, 09:29
mihalich81
Спасибо за ответ!
На SQLite мой запрос работает, хотя не должен. Видимо, имеют место невысокие требования к синтаксису.
Для FireBird 2.5 нашёл пару ошибок.
1. Список GROUP BY обязательно должен содержать все поля, кроме агрегатных функций.
2. Применение GROUP BY исключает возможность применения вложенных SELECT для родительского.
Для FireBird 3.0 не тестировал.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 09 авг 2017, 23:26
Vitaly
mihalich81 писал(а):Спасибо за ответ!
На SQLite мой запрос работает, хотя не должен. Видимо, имеют место невысокие требования к синтаксису.
Для FireBird 2.5 нашёл пару ошибок.
1. Список GROUP BY обязательно должен содержать все поля, кроме агрегатных функций.
2. Применение GROUP BY исключает возможность применения вложенных SELECT для родительского.
Для FireBird 3.0 не тестировал.
С пунктом 2 не согласен :-) при определенных условиях можно.