This is basically an inventory project which tracks the \"Stock In\" and \"Stock Out\" of items through Purchase and sales respectively.
The inventory system follows
If cursors aren't an option, a SQLCLR stored procedure might be. This way you could obtain the raw data into .net objects, manipulate / sort it using c# or vb.net and set the resulting data as the procedure's output. Not only this will give you what you want, it may even turn up being much easier than trying to do the same in pure T-SQL, depending on your programming background.