gpt4 book ai didi

sql - 在不使用临时表的情况下排序并将运行总计应用于同一列

转载 作者:行者123 更新时间:2023-12-01 11:46:03 26 4
gpt4 key购买 nike

我的表的表示:

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

我需要按 SaleAmount 对我的表 Sales 进行排序,然后选择 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 表?

最佳答案

如果您使用的是 SQL Server 2012,那么您可以只使用窗口函数来计算累加和:

select s.*,
sum(SaleAmount) over (order by id) as RunningTotal
from Sales s

这相当于下面的相关子查询:

select s.*,
(select sum(SalesAmount) from sales s2 where s2.id <= s.id) as RunningTotal
from Sales s

关于sql - 在不使用临时表的情况下排序并将运行总计应用于同一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com