Представление моей таблицы:
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
без использования временной таблицы?