需要一种更好的方法来将一个列值与同一 table 行中的多个列值进行比较
Need a better way to compare one column value to many column values in the same table row
我有一个 SQL 2017 年的数据table 结构如下:
A
1
2
3
5
10
0
0
2
0
1
0
出于报告目的,我需要一个 TSQL 查询来遍历每一行,从 A 列中获取值,并将其与第 1-3 列中的每个值进行比较。如果 col A 的值大于 col [x] 的值,则应迭代计数器。当该行的所有比较都完成后,我记录计数器的最终值,然后冲洗并重复下一行。
逐个单元地执行此过程 RBAR 是行不通的。我的实际 table 有 300 多行和 15 列应与初始值进行比较。任何人都可以建议更好的方法吗?
我们可以在这里使用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 2017 年的数据table 结构如下:
A | 1 | 2 | 3 |
---|---|---|---|
5 | 10 | 0 | 0 |
2 | 0 | 1 | 0 |
出于报告目的,我需要一个 TSQL 查询来遍历每一行,从 A 列中获取值,并将其与第 1-3 列中的每个值进行比较。如果 col A 的值大于 col [x] 的值,则应迭代计数器。当该行的所有比较都完成后,我记录计数器的最终值,然后冲洗并重复下一行。
逐个单元地执行此过程 RBAR 是行不通的。我的实际 table 有 300 多行和 15 列应与初始值进行比较。任何人都可以建议更好的方法吗?
我们可以在这里使用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;