Sql server 获取列具有最高值的行的列名
我得到了一个有10列的表,前3列用作标识符,其他7列包含数字 因此,我的表结构如下所示: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 |
| 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
,查看案例陈述了吗??请告诉我们你试过什么。