SQL 服务器 - 针对两列中的反向重复值进行验证 [内部示例]
SQL Server - Validation against duplicate values in reverse in two columns [Example Inside]
我正在尝试执行验证以检查是否以相反的顺序输入了相同的外汇汇率值。用户将填充由三列组成的电子表格:
- 来自货币
- 到货币
- 评分
用户将数据添加到电子表格中以通过系统导入,下面是数据外观的模拟示例:
我有适当的验证结构,我只是想知道如何编写 select 语句以便 return 所有具有两个方向的行(如前两行在此示例中),由于它们是相同的货币,只是顺序相反。
嗯,你可以使用:
select fx.*
from fx
where exists (select 1
from fx fx2
where fx2.fromc = fx.toc and fx2.toc = tx.fromc and fx2.rate = fx.rate
);
实际上,您可以扩展此检查以确保这些值接近彼此的算术逆。因为十进制值有些松弛,所以我建议:
select fx.*
from fx
where exists (select 1
from fx fx2
where fx2.fromc = fx.toc and fx2.toc = tx.fromc and
abs(fx2.rate * fx.rate - 1) > 0.001
);
这会检查产品是否偏差超过千分之一。您想要的确切阈值取决于您的需要。
我正在尝试执行验证以检查是否以相反的顺序输入了相同的外汇汇率值。用户将填充由三列组成的电子表格:
- 来自货币
- 到货币
- 评分
用户将数据添加到电子表格中以通过系统导入,下面是数据外观的模拟示例:
我有适当的验证结构,我只是想知道如何编写 select 语句以便 return 所有具有两个方向的行(如前两行在此示例中),由于它们是相同的货币,只是顺序相反。
嗯,你可以使用:
select fx.*
from fx
where exists (select 1
from fx fx2
where fx2.fromc = fx.toc and fx2.toc = tx.fromc and fx2.rate = fx.rate
);
实际上,您可以扩展此检查以确保这些值接近彼此的算术逆。因为十进制值有些松弛,所以我建议:
select fx.*
from fx
where exists (select 1
from fx fx2
where fx2.fromc = fx.toc and fx2.toc = tx.fromc and
abs(fx2.rate * fx.rate - 1) > 0.001
);
这会检查产品是否偏差超过千分之一。您想要的确切阈值取决于您的需要。