请试试这个:
SELECT ROW_NUMBER() OVER (ORDER BY ActualAmount DESC) rw ,
*
INTO #Negative
FROM your_table
WHERE ActualAmount < 0;
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1
)) rw ,
*
INTO #Positive
FROM your_table
WHERE ActualAmount > 0;
CREATE TABLE #FinalTable
(
Subledger NVARCHAR(50) NULL ,
ActualAmount INT NULL
);
DECLARE @NCounterMax INT= (SELECT COUNT(*)
FROM #Negative
);
DECLARE @PCounterMax INT= (SELECT COUNT(*)
FROM #Positive
) ,
@NC INT= 1 ,
@PC INT= 1 ,
@amount INT= 0 ,
@amount2 INT= 0 ,
@subledger NVARCHAR(50) ,
@countinue BIT = 1 ,
@SumAmount INT= 0;
WHILE (@PC <= @PCounterMax)
BEGIN
SELECT @amount = ActualAmount ,
@subledger = Subledger
FROM #Positive
WHERE rw = @PC;
INSERT INTO #FinalTable
VALUES (@subledger, @amount);
SET @SumAmount = @amount;
PRINT @amount;
WHILE (@NC <= @NCounterMax)
BEGIN
SELECT @amount2 = ActualAmount ,
@subledger = Subledger
FROM #Negative
WHERE rw = @NC;
INSERT INTO #FinalTable
VALUES (@subledger, @amount2);
SET @SumAmount = @SumAmount + @amount2;
IF (@SumAmount = 0)
BEGIN
SET @countinue = 0;
BREAK;
END;
SET @NC = @NC + 1;
END;
IF (@countinue = 0)
BREAK;
DELETE #FinalTable;
SET @PC = @PC + 1;
END;
SELECT *
FROM #FinalTable;
DROP TABLE #Negative;
DROP TABLE #Positive;
DROP TABLE #FinalTable;
可以删除#FinalTable
记录从你的表中。
从结果集中移除这五行中的两行的逻辑尚不清楚。这些行如何与0 *的总和相关?请[编辑]你的问题。 –
那么,如果你在期望的结果中总结那3个答案将是0.这就是我想看到的不是-25775和48994 – Jomari
你已经失去了我! – Strawberry