Вы можете попробовать использовать функцию окна ROW_NUMBER
make номер строки для таблицы tblstock
.
затем используйте функцию агрегата условия, чтобы сделать сводку.
SELECT ProdName,
[1st load],
[2st load],
[3st load],
[4st load],
price,
(([1st load]+[2st load] +[3st load]+[4st load]) * price) 'Total'
FROM (
SELECT t1.ProdName,
MAX(CASE WHEN t2.rn = 1 then t2.Quantity ELSE 0 END) '1st load',
MAX(CASE WHEN t2.rn = 2 then t2.Quantity ELSE 0 END) '2st load',
MAX(CASE WHEN t2.rn = 3 then t2.Quantity ELSE 0 END) '3st load',
MAX(CASE WHEN t2.rn = 4 then t2.Quantity ELSE 0 END) '4st load',
t1.Price
FROM tblProduct t1
LEFT JOIN (
SELECT *,ROW_NUMBER() over(partition by ProdName order by INdate desc) rn
FROM tblstock
) t2 on t1.ProdName = t2.ProdName
GROUP BY t1.ProdName,t1.Price
)t1