(3) Получаешь всех контрагентов с суммами продаж. Из этой вт получаешь другую с колонкой "нарастающий итог" в котором будет выводиться суммарная сумма продаж всех, у кого сумма ниже чем у текущей. Находишь контрагента с нарастающим итогом не меньше заданного и наконец из самой первой вт выводишь его и всех кто продал больше.
Проблемы будут если есть два контрагента с одинаковым объемом продаж и заданный объем достигается с одни из них. В зависимости от условий задачи если нельзя выводить лишнего контрагента, можно исхитриться и "нарастающий итог" считать не нарастающим итогом, а разницей с общей суммой. В типовой такого нет, афаир.
(3) в смысле? выводишь отчет по продажам: контрагент, сумма продаж, сортируешь таблицу по убыванию суммы продаж, всё. выводишь таблицу, пока общая сумма не превысила 80%.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший