我想从表中的3列计算体积并返回唯一的体积。我们有很多行与Width
,Height
和Length
相同,因此我的体积计算自然会有Volume
的重复返回值。我认为,为了做到这一点,我必须用OVER
,PARTITION
和CTE
的别名不允许在OVER
在OVER中使用CTE(PARTITION BY)
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行
我怎么能修改此查询基本上做到以下
- 计算容积对于表中的每一行
- SELECT行具有唯一的体积计算。 (我不希望看到的相同体积两次在我的结果集)
编辑 - 按要求
什么我想是
ID |卷
193 | 280
286 | 350
274 | 550
241 | 720
基本上,我想计算量的每一行的话,我想以某种方式组由以各组
请阐明“SELECT rows DISTINCT by volume”的含义。样本数据和期望的结果将有所帮助。 –
@Adrian是'SELECT MIN(id),Width * Height * [Length] AS Volume FROM PackageMaterialDimensions GROUP BY Width * Height * [Length]'insufficient? –