Sql server 输出具有最高值的列名

Sql server 输出具有最高值的列名,sql-server,reporting-services,Sql Server,Reporting Services,我在SQLServer表中有很多列,其中包含数字。 我需要检查特定列的最大数字,并输出表中每一行的列名 例如: RED | BLUE | GREEN | BLACK | Highest Column 0 2 1 4 BLACK <-- Outputted result of an expression 红色|蓝色|绿色|黑色|最高一栏 0 2 1 4黑色使用。这将为您提供最高值的颜色(黑色): 用您自己的表替换@t应该很容易。如果有多个

我在SQLServer表中有很多列,其中包含数字。 我需要检查特定列的最大数字,并输出表中每一行的列名

例如:

RED | BLUE | GREEN | BLACK | Highest Column

0      2       1       4         BLACK <-- Outputted result of an expression
红色|蓝色|绿色|黑色|最高一栏
0 2 1 4黑色使用。这将为您提供最高值的颜色(黑色):


用您自己的表替换@t应该很容易。

如果有多个列具有最高值,该怎么办?这表明当您想以相同的方式处理多列数据时,您的数据模型有点崩溃。通常是指列应为
颜色
(或
分数
,或这些数字中的任何一个所代表的)4行以存储此数据。这样一来,颜色就变成了数据,而不是嵌入到表元数据中,而且查询也很容易编写。此外,当您想更正问题中的某些内容时,您可以修改它,而不必在下面写注释。(对于格式化,您可以使用
{}
按钮)颜色和值是任意信息。实际数据运行良好。我已经简化了实际结构,以便更容易进行故障排除。即使您已经抽象出了概念,但问题仍然存在——您要根据其进行计算的数据(计算聚合、比较值等),应该在单个列中,您会发现数据已嵌入到列名中,无法对其进行查询。我可以将其用作表单元格中的表达式吗?用Mine替换您的查询应该很容易。不幸的是,我使用的查询驱动了报告其余部分的100%。
DECLARE @t table(red int, blue int, green int, black int)-- | Highest Column
INSERT @t values(0,2,1,4)

SELECT red, blue, green, black, highest 
FROM @t -- replace @t with your own table
CROSS APPLY
(SELECT top 1 color highest
FROM
  (VALUES('RED', red), ('BLUE', blue), 
  ('GREEN', green), ('BLACK', black)) x(color, value)
ORDER BY value desc) x