找到最多的多列(按行)和列'姓名最多值发生(T-SQL)

时间:2017-11-25 16:09:51

标签: sql-server tsql

我对T-SQL和高级概念/查询相当新,我很难找出进一步描述的情况。可以说,我有一张这样的表:

--------------------
| K | C1 | C2 | C3 |
--------------------
| 1 | 14 | 24 | 48 |
| 2 | 10 | 65 | 37 | 
| 3 | 44 | 90 | 22 |
--------------------

我需要逐行找到最大值,已经多次询问了SO,以及有什么不同之处,此外,我还想要列'发现最大值的名称。结果必须是这样的:

-- how to get Col column?
-----------------
| K | Max | Col |
| 1 | 48  | C3  |
| 2 | 65  | C2  | 
| 3 | 90  | C2  |
-----------------

我学会了如何根据thisthis线程查找最大行数,但我无法理解如何添加包含列的其他列'姓名最多价值发生了。我知道我必须表现出努力,但实际上我无法展示任何东西,因为我不太了解如何做到这一点,我的所有尝试都只是返回错误。任何想法,提示?提前谢谢!

2 个答案:

答案 0 :(得分:1)

SQL Server中最简单的方法是使用apply

select t.k, v.col, v.val
from t cross apply
     (select top 1 v.col, v.val
      from (values ('C1', t.C1), ('C2', t.C2), ('C3', t.C3)
           ) v(col, val)
      order by val desc
     ) v(col, val)

答案 1 :(得分:1)

我会通过将临时最大表连接回原始表,然后在"处写一个长"表示你有合理数量的列来解决这个问题。它看起来如下。

Select a.K
, b.Max_Value
, Case When a.Column_1 = b.Max_Value Then C1
When a.Column_2 = b.Max_Value Then C2
When a.Column_3 = b.Max_Value Then C3
... As Col
From Your_Table as a Left Join Max_Table as b on a.K = b.K

我相信如果我正确理解了这个问题,这应该能得到你想要的东西。如果你有很多专栏,那么这可能是一个更好的方法。