2 Владимир Максимов
Владимир, конечно же есть такая фича COUNT(DISTINCT ) и в Оракле. Не могу сказать, что она в данном случае сильно спасает, так как номера партий все равно нужно откуда-то доставать. Обычно подобные запросы я пишу с использованием фразы WITH, и тогда повторяющийся фрагмент (который "ЕЩЕ РАЗ увы") выносится за "скобки" основного запроса и прописывается один раз перед ним:
Код:
WITH Tmp01 AS
(SELECT InventSerialId, InventBatchId FROM InventDim
INNER JOIN InventTrans ON InventDim.InventDimId = InventTrans.InventDimId
WHERE InventSerialId <> CHR(2) --// CHR(2) - аксаптовский null для Oracle
GROUP BY InventSerialId, InventBatchId
) --// уникальные сочетания серийника и партии, встречающиеся в InventTrans
SELECT
Tmp01.InventSerialId AS "Серийный номер",
Tmp02.Cnt AS "Кол-во повторений", --// ...этого серийника для разных номеров партий
Tmp01.InventBatchId AS "Номер партии"
FROM
Tmp01
INNER JOIN
(SELECT InventSerialId, COUNT(*) AS Cnt FROM Tmp01
GROUP BY InventSerialId
HAVING COUNT(*) <> 1
) Tmp02 --// уникальные серийники из уникальных сочетаний серийник+партия
ON Tmp01.InventSerialId = Tmp02.InventSerialId
ORDER BY Tmp01.InventSerialId, Tmp01.InventBatchId
Здесь я эти "скобки" раскрыл, чтобы пример гарантированно мог сработать и в SQL Server (после замены CHR(2) на пустую строку).
Но вообще речь-то не обо всем об этом.

Виноват, если показалось по-другому, но я не ставил целью обсуждать способ нахождения задвоений (и максимально его конкретно оптимизировать - и в SQL, и в Аксе). Это просто пример о чем-нибудь.
Цель другая - показать, как довольно сложный запрос SQL можно достаточно прозрачно реализовать в Аксапте серией последовательных простых select'ов на основе временных таблиц, которые не нужно готовить заранее! А также показать, как в рамках одного метода (джоба) можно фактически реализовать вычисления типа SELEСT * FROM (SELEСT * FROM (SELEСT * FROM (SELEСT * FROM (SELEСT * FROM (SELEСT * FROM... )))))
Нельзя в лоб сделать в аксаптовском select'е одновременно группировку и сортировку (причем, убывающую)? Пожалуйста, разделим процесс на 2 запроса. А если что-то посложнее, то и на 3, и на 4, и на более.