CREATE TABLE #orders(trans_Id int identity(1,1),Order_Id varchar(50),
Item_No int,Order_Qty int,Supply_Qty int,Trans_Type char(2),
Climed_Type char(2),Climed_Prcntage int
);
INSERT INTO #orders
VALUES
('ordxyz',1 ,500,NULL,'O',NULL ,NULL),
('ordxyz',2 ,1000,NULL,'O',NULL, NULL),
('ordxyz',3 ,100,NULL,'O',NULL ,NULL),
('ordxyz',4 ,700,NULL,'O',NULL ,NULL),
('ordxyz',5 ,600,NULL,'O', NULL ,NULL),
('ordxyz',1 ,NULL,500,'I','F',100 ),
('ordxyz',2 ,NULL,300,'I','F',100 ),
('ordxyz',2 ,NULL,700,'I','P',30 ),
('ordxyz',4 ,NULL,500,'I','F',100 ),
('ordxyz',5 ,NULL,200,'I','P',70 ),
('ordxyz',5 ,NULL,150,'I','P',40 ),
('ordxyz',5 ,NULL,200,'I','P',30 ),
('ordxyz',5 ,NULL,120,'I','F',100 );
;WITH CTE AS(
select Item_No
,Order_Id
,SUM(Supply_Qty) AS Supply_Qty
,(SELECT SUM(Order_Qty) FROM #orders) AS TotAmount
from #orders where Climed_Type IN('P','F') GROUP BY Item_No,Order_Id
)
SELECT ord.Order_Id,
ord.Item_No,
ord.Order_Qty,
CTE.Supply_Qty AS Supply_Qty,
(ord.Order_Qty-ISNULL(CTE.Supply_Qty,0)) AS Pendings,
CASE WHEN SIGN((ord.Order_Qty-ISNULL(CTE.Supply_Qty,0)))=0 THEN 'F'
WHEN SIGN((ord.Order_Qty-ISNULL(CTE.Supply_Qty,0)))=1 THEN 'P' ELSE 'OF'
END Climed_Type,
((ISNULL(CTE.Supply_Qty,0)*100.0)/(ord.Order_Qty))-100.0 AS Pendingpercent
FROM #orders ord LEFT join CTE
ON(cte.Item_No=ord.Item_No AND CTE.Order_Id=ord.Order_Id)
WHERE ORD.Trans_Type='O';
OUTPUT:-
Order_Id Item_No Order_Qty Supply_Qty Pendings Climed_Type Pendingpercent
ordxyz 1 500 500 0 F 0.000000000000
ordxyz 2 1000 1000 0 F 0.000000000000
ordxyz 3 100 NULL 100 P -100.000000000000
ordxyz 4 700 500 200 P -28.571428571429
ordxyz 5 600 670 -70 OF 11.666666666666