我的表的表示:
CREATE TABLE Sales
(
id int identity primary key,
SaleAmount numeric(10,2)
);
DECLARE @i INT;
SELECT @i = 1;
SET NOCOUNT ON
WHILE @i <= 100
BEGIN
INSERT INTO Sales VALUES (ABS(CHECKSUM(NEWID()))/10000000.0 );
SELECT @i = @i + 1;
END;
SET NOCOUNT OFF
我需要对我的表进行排序Sales
,SaleAmount
然后选择运行总数SaleAmount
不大于 X的所有记录。
为此,我目前正在使用一个临时表来首先对记录进行排序,然后选择运行总计小于或等于 X 的记录(在此示例中为 10)。
CREATE TABLE #TEMP_TABLE
(
ID integer IDENTITY PRIMARY KEY,
SaleAmount numeric(10,2)
);
INSERT INTO #TEMP_TABLE
(SaleAmount)
SELECT SaleAmount FROM Sales
ORDER BY SaleAmount
SELECT * FROM
(SELECT
Id,
SaleAmount,
(SaleAmount+COALESCE((SELECT SUM(SaleAmount)
FROM #TEMP_TABLE b
WHERE b.Id < a.Id),0))
AS RunningTotal
FROM #TEMP_TABLE a) InnerTable
WHERE RunningTotal <= 10
有没有一种方法可以让我在不使用临时表的情况下先订购我Sales
的桌子?