【问题标题】:Select highest value from several columns in a single tuple ORACLE从单个元组 ORACLE 中的几列中选择最高值
【发布时间】:2015-12-23 16:47:17
【问题描述】:

我有一个 Oracle 11g 表,它有一个唯一的 ID 和几个带有数值的列,它看起来像这样:

ID   COL1   COL2     COL3 ...    COLn
 1    0       15       20         12
 2    4       0        10         0
 3    20      0         3         8

我需要知道,对于每一行,包含最高值的列以及列名。例如,在这个例子中,如果我选择 ID = 1,结果应该是:

COL3
____
20

我尝试使用 GREATEST 函数,但它只返回值而不是列名。另一种方法是使用 CASE 语句,但是该表有 300 多个列,并且一对一比较会很糟糕。我听说过使用 PIVOT 功能,但我不知道如何应用它。任何建议都非常感谢!

【问题讨论】:

  • 您的示例数据应该显示什么列名?第一行的最大值在col3,第三行的最大值在col1。您的示例数据仅显示单行结果。多行应该使用什么列名?

标签: oracle max multiple-columns


【解决方案1】:

试试:

SELECT D, COLUMN_NAME, VA_LUE
FROM (
    SELECT D, COLUMN_NAME, VA_LUE,  MAX( VA_LUE ) OVER (partition by D) as Max_Value
    FROM table1
    UNPIVOT(
      va_lue FOR column_name IN ( "COL1", "COL2", "COL3", ........
          ......................., "COLN" )
    )
)
WHERE VA_LUE = MAX_VALUE;

演示:http://sqlfiddle.com/#!4/13fd5/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2020-05-28
    • 2018-10-27
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多