*check this brings results but can not find how to group them by WhsName*/
DECLARE @DATE AS DATETIME;
SET @DATE = GETDATE ();
select P.ItemName, P.ItemCode,P.WhsName,
[100] Sh,
[101] TI,
[102] Bod,
[103] ST,
[104] PR,
[199] CO
from (
SELECT T0.[WhsCode],T2.[WhsName], T0.[ItemCode], T1.[ItemName],
(ISNULL(SUM(M.InQty)-SUM(M.OutQty),0)) AS [Stock]
FROM OINM M WITH (NOLOCK)
INNER JOIN OITW T0 (NOLOCK) ON M.ItemCode=T0.ItemCode AND M.Warehouse=T0.WhsCode
INNER JOIN OITM T1 (NOLOCK) ON T0.ItemCode = T1.ItemCode
INNER JOIN OWHS T2 (NOLOCK) ON T0.WhsCode = T2.WhsCode
WHERE M.DocDate <= @DATE AND M.ItemCode = '05031-101'
GROUP BY T0.WhsCode, T2.WhsName, T0.ItemCode, T1.ItemName
) P
PIVOT (
SUM(Stock)
FOR [WhsCode] IN ([100],[101],[102],[103],[104],[199])
) P
ORDER BY P.ItemName, P.ItemCode