Sql server 获取列具有最高值的行的列名

Sql server 获取列具有最高值的行的列名,sql-server,unpivot,Sql Server,Unpivot,我得到了一个有10列的表,前3列用作标识符,其他7列包含数字 因此,我的表结构如下所示: | ID1 | ID2 | ID3 | Data1 | Data2 | Data3 | Data4 | Data5 | Data6 | Data7 | 现在我需要获取特定行中具有最高值的列的列名(Data1-Data7) 因此,表中的数据可能如下所示: | A | B | C | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | A | B | D | 5 | 8 | 9 | 3 | 51 |

我得到了一个有10列的表,前3列用作标识符,其他7列包含数字

因此,我的表结构如下所示:

| ID1 | ID2 | ID3 | Data1 | Data2 | Data3 | Data4 | Data5 | Data6 | Data7 |
现在我需要获取特定行中具有最高值的列的列名(Data1-Data7)

因此,表中的数据可能如下所示:

| A | B | C | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| A | B | D | 5 | 8 | 9 | 3 | 51 | 11 | 4 |
| D | A | F | 31 | 5 | 9 | 11 | 23 | 2 | 9 |
这一投入的预期结果将是:

| A | B | C | Data7 |
| A | B | D | Data5 |
| D | A | F | Data1 |
我尝试了一个unpivot查询,我可以得到一个表,其中显示了最后一列中的数据(7、51和23),但由于ID1、ID2和ID3上的group by子句,我无法将列名添加到此表中。将透视字段添加到此group by子句会显示所有未插入的数据。

使用窗口功能(行编号),而不是group by:

WITH Ordering AS
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID1, ID2, ID3 ORDER BY Value DESC) AS OrderingValue
    FROM table
    UNPIVOT
    (
        Value FOR Source IN (Data1, Data2, Data3, Data4, Data5, Data6, Data7)
    ) up
)

SELECT *
FROM Ordering
WHERE OrderingValue = 1
结果:

ID1 ID2 ID3 Value   Source  OrderingValue
A   B   C   7       Data7   1
A   B   D   51      Data5   1
D   A   F   31      Data1   1

显然,您可以
选择ID1、ID2、ID3、Source,而不是
SELECT*FROM Ordering

查看案例陈述了吗??请告诉我们你试过什么。