如何在多个字段中执行聚合函数逻辑?

时间:2016-06-06 16:44:32

标签: sql sql-server tsql aggregate-functions sql-server-2014-express

如何从同一记录中获得三维的max()?

描述: 我有一个很大的小部件列表,有多个属性,来自多个来源。想想手动数据输入,你有不同的人输入相同的东西,然后你需要巩固差异。虽然,我只想在某些标准下执行一些逻辑来选择一个值,而不是审核每个差异。

一个类似的例子:如果一个来源说小部件xyz重3磅,而b来说它重4磅,我只是盲目地拿4个,因为它更大,并说我需要过于谨慎包装/运输目的。这很简单,我选择MAX()。

现在,我有一组属于不同字段但相关的属性。想想盒子的尺寸。有宽度/长度/高度字段。如果一个消息来源说'尺寸'是2x3x4,而另一个消息来说他们是3x3x4,我需要采取更大的尺寸,原因与上述相同。听起来像MAX(),除了......

我的消息来源不同意宽度,高度或长度。一个2x3x4的盒子可以输入4x3x2或2x4x3,具体取决于源的外观。如果我使用3个这样的MAX这样的源,我最终会得到4x4x4,即使所有3个源都正确测量它。这是不可取的。

如何获取最大的“测量”值,但确保所有三个值都来自同一记录?

如果“最大”是不可能的,我们可以选择独特的...除了第四个源,其中大约40%的小部件有0x0x0。如果任何其他来源确实测量该小部件,我不能留下0x0x0。

一些示例数据

ID,widget_name,height,width,leng
(a1,widget3,2,3,4)
(b1,widget3,2,4,3)
(c1,widget3,4,3,2)
(d1,widget3,0,0,0)

输出应为(widget3,4,3,2)

1 个答案:

答案 0 :(得分:3)

您可以使用row_number而不是group by like

select * from 
(select data, ID,widget_name,height,width,leng, ROW_NUMBER() over ( partition by widget_name order by height + width + leng desc ) rowid
from yourTable
) as t
where rowid = 1
相关问题