作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据表中的 3 列计算体积并仅返回唯一体积。我们有许多具有相同 Width
、Height
和 Length
的行,因此我的体积计算自然会有重复的 Volume 返回值
。我的印象是,为了实现这一点,我必须使用 OVER
、PARTITION
和 CTE
,因为不允许使用别名在 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 行
我如何修改此查询以基本上执行以下操作
- 计算表中每一行的体积
- 选择具有独特体积计算的行。 (我不想在我的结果集中看到相同的体积两次)
编辑 - 按要求提供数据
我想要的是
编号 |音量
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/
我是一名优秀的程序员,十分优秀!