SELECT MMITNO,
MMITDS,
1 - TVK / Oms AS TG,
TVK,
Oms,
MBEOQT,
Antal,
Antal / MBEOQT AS omshast,
(Antal / MBEOQT) * (1 - TVK / Oms) AS Dupont,
MMITCL
from (
SELECT SUM(dbo.OSBSTD.UCSAAM) AS Oms,
SUM(dbo.OSBSTD.UCUCOS) AS TVK,
dbo.MITMAS.MMITDS,
dbo.MITMAS.MMITNO,
dbo.MITBAL.MBEOQT,
dbo.MITBAL.MBWHLO,
dbo.MITMAS.MMITCL,
SUM(dbo.OSBSTD.UCIVQT) AS Antal
FROM dbo.OSBSTD
INNER JOIN dbo.MITMAS ON dbo.OSBSTD.UCITNO = dbo.MITMAS.MMITNO
INNER JOIN dbo.MITBAL ON dbo.MITMAS.MMITNO = dbo.MITBAL.MBITNO
WHERE dbo.OSBSTD.UCIVDT BETWEEN '20040101' AND '20050101'
and dbo.MITMAS.MMSTAT < '50'
and dbo.MITBAL.MBWHLO = '001'
and dbo.MITMAS.MMITCL <> '999'
GROUP BY dbo.MITMAS.MMITCL,
dbo.MITMAS.MMITDS,
dbo.MITMAS.MMITNO,
dbo.MITMAS.MMSTAT,
dbo.MITBAL.MBEOQT,
dbo.MITBAL.MBWHLO) dt
WHERE MBEOQT <> 0
AND Oms <> 0
ORDER BY MMITCL,
Dupont
Då du har group by så finns det ingen anledning att även ha distinct.
Din left join blir i praktiken en inner join eftersom du har villkor på tabellen mitbal i where-klausulen.
Det finns ingen anledning att använda having eftersom du inte använder någon aggregatfunktion i villkoret.
Att skriva top 100 percent är meningslöst i största allmänhet.