【问题标题】:output the column name with the highest value输出具有最高值的列名
【发布时间】:2015-06-02 14:26:43
【问题描述】:

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

例如:

RED | BLUE | GREEN | BLACK | Highest Column

0      2       1       4         BLACK <-- Outputted result of an expression

我有一个从数据库表中提取所有列的数据集。 我需要一个表达式来评估数据并返回最高值的列名。

我不确定这种情况背后的逻辑。任何帮助将不胜感激。

这是一份 SSRS 报告。

【问题讨论】:

  • 如果有超过 1 列保存最高值怎么办?
  • 当您想以相同的方式处理 multiple 列中的数据时,这表明您的数据模型有些损坏。这通常表明这些列应该是 ColourValue(或 Score,或这些数字中的每一个代表的任何数字),并使用 4 个 来存储这些数据。这样,颜色最终以 data 的形式出现,而不是嵌入到表 metadata 中,并且查询也很容易编写。
  • 另外,当您想纠正问题中的某些内容时,您可以edit 它,而不必在其下方写评论。 (对于格式化,{} 按钮是你的朋友)
  • 颜色和值是任意信息。实际数据工作正常。我已经简化了实际结构,以便于排除故障。
  • 即使您已经抽象了这个概念,重点仍然存在 - 您想要计算的数据(计算聚合、比较值等),应该包含在单个列,您会发现 data 已嵌入在无法查询的列 names 中。

标签: sql-server reporting-services


【解决方案1】:

使用CROSS APPLY。这将为您提供最高价值的颜色(黑色):

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

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

【讨论】:

  • 我可以在表格单元格中使用它作为表达式吗?
  • 用我的查询替换你的查询应该很容易
  • 不幸的是,我正在使用的查询正在推动报告其余部分的 100%。
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多