Я думаю, что вам просто нужно добавить оконное count
к вашим SaleID
значениям, чтобы получить количество строк подробностей, возвращаемых для каждой, что изменит ваш скрипт на следующее:
SELECT NS.saleid,
NS.saledate,
P.NAME,
(NS.discount / Att.quantity) / count(NS.saleid) over (partition by NS.saleid) as AS OrderLevelDiscount,
NSD.discount AS ItemLevelDiscount
FROM salesdetail NSD
INNER JOIN sales NS
ON NSD.saleid = NS.saleid
INNER JOIN (SELECT saleid,
CASE
WHEN Sum(quantity) IS NULL THEN 0
ELSE Sum(quantity)
END AS Quantity
FROM salesdetail
GROUP BY saleid) Att
ON NS .saleid = Att.saleid
LEFT JOIN productsmanager P
ON NSD.productcode = P.code