I have the following query.
select  distinct b.BinName, Si.Code, si.Name, b.ConfirmedQtyInStock+b.UnconfirmedQtyInStock as StockQty, AllocationPriority
, Case When r1.BinName = b.BinName Then r2.BinName Else r1.BinName End as [Location1], Case When r1.BinName = b.BinName Then r2.Qty Else r1.Qty End as [Qty1]
	, Case When r2.BinName In (b.BinName,r1.BinName) Then r3.BinName Else r2.BinName End as [Location2]
	--,r1.BinName, r1.Qty,r2.BinName, r2.Qty,r3.BinName, r3.Qty,r4.BinName, r4.Qty
from BinItem b Inner Join StockItem si On si.ItemID = b.ItemID
  left outer join 
	(select ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking
	,si.Code, bi.BinName, bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock as Qty  from stockitem si inner join binitem bi on bi.ItemID = si.itemid
	where bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock >0) r1
	On r1.ranking=1 and r1.Code=si.Code 
	
  left outer join 
	(select ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking
	,si.Code, bi.BinName, bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock as Qty  from stockitem si inner join binitem bi on bi.ItemID = si.itemid
	where bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock >0) r2
	On r2.ranking=2 and r2.Code=si.Code
	
  left outer join 
	(select ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking
	,si.Code, bi.BinName, bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock as Qty  from stockitem si inner join binitem bi on bi.ItemID = si.itemid
	where bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock >0) r3
	On r3.ranking=3 and r3.Code=si.Code 
	
  left outer join 
	(select ROW_NUMBER() Over (Partition By si.Code Order By si.Code, ConfirmedQtyInStock+UnconfirmedQtyInStock asc) as ranking
	,si.Code, bi.BinName, bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock as Qty  from stockitem si inner join binitem bi on bi.ItemID = si.itemid
	where bi.ConfirmedQtyInStock+bi.UnconfirmedQtyInStock >0) r4
	On r4.ranking=4 and r4.Code=si.Code 	
Where  si.StockItemStatusID=0  and ConfirmedQtyInStock+UnconfirmedQtyInStock >0
and  si.code='06403107C'
--and BinName='C01A1'
Order By Code, b.BinName
What I am trying to do is to ensure that only unique locations are in each of the columns. For example:
C03B1	06403107C	1 1/4in COUNTER NUT CHROME PLATED BRASS	543.00000	1	C04A1	9.00000
C04A1	06403107C	1 1/4in COUNTER NUT CHROME PLATED BRASS	9.00000	4	C03B1	543.00000
However I haven't quite worked out the case logic to move all the values in the r1,r2,r3,r4 subqueries correctly.