需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较

Posted

技术标签:

【中文标题】需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较【英文标题】:Need a better way to compare one column value to many column values in the same table row 【发布时间】:2021-12-12 22:38:50 【问题描述】:

我有一个这样构造的 SQL 2017 数据表:

A 1 2 3
5 10 0 0
2 0 1 0

出于报告目的,我需要一个 TSQL 查询来遍历每一行,从 A 列获取值,并将其与第 1-3 列中的每个值进行比较。如果 col A 的值大于 col [x] 的值,则应迭代计数器。当该行的所有比较完成后,我记录计数器的最终值,然后冲洗并重复下一行。

执行此过程 RBAR 和逐个单元格是行不通的。我的实际表有 300 多行和 15 列,初始值应与之进行比较。谁能提出一个更好的方法来做到这一点?

【问题讨论】:

@Austin A 计数器,用于跟踪给定行中 Col A 大于 Col [X] 的次数。例如(这是我现在正在做的方式,我想改变的方式):在第 1 行,col A = 5。是 col A > col 1?不。是 col A > col 2 吗?是的;计数器加 1。以此类推。 【参考方案1】:

我们可以在这里使用CASE 表达式:

SELECT *, CASE WHEN A > [1] THEN 1 ELSE 0 END +
          CASE WHEN A > [2] THEN 1 ELSE 0 END +
          CASE WHEN A > [3] THEN 1 ELSE 0 END AS counter
FROM yourTable;

【讨论】:

以上是关于需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 表行中迭代的最佳方法 - C#

R - 如果列值与字符向量中的任何值匹配,则返回它旁边的列 [重复]

当行悬停并且列值与另一行匹配时显示工具提示

数组列值与配置单元中的正常列值之间的比较

如何根据另一列值将一列分成多个?

将所有列值与 Excel 中的单个单元格进行比较