这是一张表…
ID QTY DATE CURRENT_STOCK ---------------------------------- 1 1 Jan 30 2 1 Feb 30 3 2 Mar 30 4 6 Apr 30 5 8 May 30 6 21 Jun 30
我需要返回总数量等于或超过当前库存水平的最新行,一旦达到总数,就不包括任何其他行,因此我希望只看到这些行…
ID QTY DATE CURRENT_STOCK ---------------------------------- 4 6 Apr 30 5 8 May 30 6 21 Jun 30
我假设我需要CTE(公用表表达式),并且已经看过这个问题,但是看不到如何将其转换为我的要求。
帮助!?
Declare @YourTable table (ID int,QTY int,DATE varchar(25), CURRENT_STOCK int) Insert Into @YourTable values (1 ,1 ,’Jan’ ,30), (2 ,1 ,’Feb’ ,30), (3 ,2 ,’Mar’ ,30), (4 ,6 ,’Apr’ ,30), (5 ,8 ,’May’ ,30), (6 ,21 ,’Jun’ ,30)
Select A.* From @YourTable A Where ID>= ( Select LastID=max(ID) From @YourTable A Cross Apply (Select RT = sum(Qty) from @YourTable where ID>=A.ID) B Where B.RT>=CURRENT_STOCK )
Returns
ID QTY DATE CURRENT_STOCK 4 6 Apr 30 5 8 May 30 6 21 Jun 30