Your idea to have a look at the inventtable is good. It is evident, that none of its fields are shown in the results and it is not needed as a link to join two other tables. So it is only there to guarantee that an appropriate record in inventtable exists. This can be done in an EXISTS clause.
Then check why there are two almost similar joins glued with UNION ALL. All the tables are accessed twice. Is this necessary? One time you want all sl.salesqty < 0 and you link via stl.subsalesid = st.marimssalesid. The other time you want all sl.salesqty > 0 and you link via stl.subsalesid = st.salesid. Maybe you can do this one select statement and access each table only once.
The result has one field of salestable (st). This is st.DATAAREAID. But this is a search and join criteria actually, so you can replace it with either sl.DATAAREAID or even with the literal 'adf'. So no field from table st. Maybe also only an EXISTS thing?
Same again, when salestable is read again as st1. It is not part of the selected columns, so maybe it can be converted into an EXISTS clause.
This is just on first glimpse, so I may be mistaken here and there. It is just to give you a something to start with.