繁体   English   中英

SQL 中具有最大值的列名

[英]Column name with max value in SQL

我有以下示例数据集:

在此处输入图像描述

我想获取具有最大值的列的名称,在本例中为“C”。 MAX不会返回所需的结果,因为它不能与多列一起使用。

SELECT MAX(A,B,C,D)
FROM TABLE

有人可以帮忙吗。

一种可能的方法是使用VALUES表值构造函数的以下语句:

桌子:

CREATE TABLE Data (A int, B int, C int, D int)
INSERT INTO Data (A, B, C, D) VALUES (50, 100, 400, 200)

陈述:

SELECT d.*, c.*
FROM Data d
CROSS APPLY (
   SELECT TOP 1 v.ColumnName, v.ColumnValue
   FROM (VALUES 
      ('A', d.A), 
      ('B', d.B), 
      ('C', d.C), 
      ('D', d.D)
   ) v (ColumnName, ColumnValue)
   ORDER BY v.ColumnValue DESC
) c

结果:

A   B   C   D   ColumnName  ColumnValue
50  100 400 200 C           400

如果表格在一行中有多个max ,您可以使用以下语句:

SELECT d.*, c.*
FROM Data d
CROSS APPLY (
   SELECT v.ColumnName, v.ColumnValue, DENSE_RANK() OVER (ORDER BY v.ColumnValue DESC) AS RN
   FROM (VALUES 
      ('A', d.A), 
      ('B', d.B), 
      ('C', d.C), 
      ('D', d.D)
   ) v (ColumnName, ColumnValue)
) c
WHERE c.RN = 1

一种方法是使用 union 和 max:

with cte as( select a as col, 'A' col_name
             from Data
             union 
             select b, 'B' col_name
             from Data
             union
             select c, 'C' col_name
             from Data
             union
             select d, 'D' col_name
             from Data
) select * 
  from cte
  where col = (select max(col) 
               from cte);

结果:

| col | col_name |
+-----+----------+
| 400 |    C     |

这是一个演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM