私のテーブルの表現:
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
テーブルを並べ替えて、現在の合計が X 以下のすべてのレコードを選択する必要がSales
ありSaleAmount
ますSaleAmount
。
これを行うために、現在、一時テーブルを使用して最初にレコードを並べ替え、次に現在の合計が 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
一時テーブルを使用せずにテーブルを最初に並べ替える方法はありますか?