返回一组列中最高值的最佳实践?

时间:2015-04-23 17:07:39

标签: sql sql-server

SQL不是我的Forte,专家给你的一些帮助会很棒:)

数据集:

 Name of Product  |  Part Number   |   Size 1  |  Size 2 |  Size 3
------------------|----------------|-----------|---------|----------
      Item1       |    12345       |     4     |    4    |     6
      Item2       |    54321       |     4     |    5    |     4
      Item3       |    54123       |     6     |    2    |     2

我需要返回3种尺寸中的最高值并将它们合并为一列。

Item1  |  6
Item2  |  5
Item3  |  6

谷歌搜索只引导我进入MAX()函数,但它只返回数据集中的最高值,而不是后面的数据。

3 个答案:

答案 0 :(得分:2)

根据您的SQL Server版本(2008或更高版本),您可以使用以下变体:

SELECT 
    [Name Of Product],
    (SELECT MAX(Val)    FROM (VALUES ([Size 1]), ([Size 2]), ([Size 3])) AS value(val)) AS MaxSize
FROM MyTable

编辑:找到此代码的original来源,会根据该问题将您的问题标记为可能的重复。

答案 1 :(得分:2)

您可以使用UNPIVOT拆分列,然后使用MAX()将最大值变为简单的GROUP BY针对相关的[Name of Product]

SELECT [Name of Product], Max(TheSize)
FROM Table1
UNPIVOT
(
    [TheSize]
    FOR Size in ([Size 1], [Size 2], [Size 3])
) x
GROUP BY [Name of Product];

SqlFiddle is back online - example here

答案 2 :(得分:0)

您可以使用嵌套的CASE语句。像这样:

SELECT [name of product], [part number], CASE WHEN size1 > size2 AND size1 > size 3 Then size1 ELSE CASE WHEN size2 > size 3 THEN size 2 ELSE size 3 END END
FROM ...