gpt4 book ai didi

sql - 在 OVER(PARTITION BY) 中使用 CTE

转载 作者:行者123 更新时间:2023-12-05 06:40:17 25 4
gpt4 key购买 nike

我正在尝试根据表中的 3 列计算体积并仅返回唯一体积。我们有许多具有相同 WidthHeightLength 的行,因此我的体积计算自然会有重复的 Volume 返回值。我的印象是,为了实现这一点,我必须使用 OVERPARTITIONCTE,因为不允许使用别名在 OVER

中引用
WITH
cteVolume (Id, Volume)
AS
(
SELECT Id, Width * Height * [Length] AS Volume FROM PackageMaterialDimensions
)
SELECT *
INTO #volumeTempTable
FROM (
SELECT pp.ID, (pp.Width * pp.Height * pp.[Length]) AS Volume,
ROW_NUMBER() OVER(PARTITION BY cte.Volume ORDER BY pp.ID DESC) rn
FROM PlanPricing pp
INNER JOIN cteVolume cte ON pp.ID = cte.Id
) a
WHERE rn = 1

SELECT * FROM #volumeTempTable
ORDER BY Volume DESC

DROP TABLE #volumeTempTable

请注意,使用临时表的原因是因为我计划对这些数据做一些额外的工作。我目前也在调试,所以我正在使用这些表输出到数据窗口

这是这个查询的错误之处
- 它仍然返回重复项
- 每行只返回一个卷
- 当表中有 71000 行时,它只返回大约 75 行

我如何修改此查询以基本上执行以下操作
- 计算表中每一行的体积
- 选择具有独特体积计算的行。 (我不想在我的结果集中看到相同的体积两次)

编辑 - 按要求提供数据

当前数据集忽略多余的列
enter image description here

我想要的是
编号 |音量
193 | 280
286 | 350
274 | 550
241 |第720章

基本上,我想计算每一行的体积,然后我想以某种方式按体积分组以减少重复并从每组中选择第一行

最佳答案

这是否符合您的要求?

WITH cteVolume (Id, Volume) AS (
SELECT Id, Width * Height * [Length] AS Volume
FROM PackageMaterialDimensions
)
SELECT DISTINCT volume
FROM CTE ;

如果您希望每个卷有一个 ID:

WITH cteVolume (Id, Volume) AS (
SELECT Id, Width * Height * [Length] AS Volume
FROM PackageMaterialDimensions
)
SELECT volume, MIN(Id) as Id
FROM CTE
GROUP BY volume;

关于sql - 在 OVER(PARTITION BY) 中使用 CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953999/

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