SQL Server中具有脏数据的三个表的内部联接
我有三张桌子,T1,T2,T3SQL Server中具有脏数据的三个表的内部联接,sql,sql-server,Sql,Sql Server,我有三张桌子,T1,T2,T3 T1有A、B、C列 T2有C、D、E列 T3有E、F、G列 其思想是将所有列进行内部联接,以获得带有列A、B、C、D、E、F、G的表T 我现在已经知道如何连接三个表了,问题是应该连接T2和T3的列E非常嘈杂,它应该是一个数值,但它有各种各样的值(文本、标点符号等) 如何使用if语句进行内部联接 以下是E列的示例: 在表T2中:10000001、$4542、$1892348、2347239(噪音为$4542和“.”) 在表T3中:100000018923482
- T1有A、B、C列
- T2有C、D、E列
- T3有E、F、G列
- 在表T2中:10000001、$4542、$1892348、2347239(噪音为$4542和“.”)
- 在表T3中:100000018923482347239(表3相当干净)
其想法是只匹配数字值,但标准联接中断,因为它无法将$4542转换为int,用户在进行联接以消除非数字值时尝试转换。我处理了t2上的坏数据,但您也可以将其扩展到其他表
你能澄清一件事吗。您希望排除嘈杂的记录,还是需要在删除特殊字符后加入记录
我相信这可以通过案例和patindex来实现 提供样本数据和期望的结果。您能否提供E列的示例,以便我们更好地提供帮助?您可以使用值替换或条件大小写作为联接条件,尽管性能会受到影响,但在不知道数据差异程度的情况下,这将很难提供帮助。非数字字符集是否可以预测并固定不变?换句话说,它是不是一组像“$”、“,”或者“u”这样的字符?如果是这样的话,您可以很容易地去掉那些已知的字符来进行连接。然而,如果它是不可预测的,或者是一个非常大的集合,那将是非常笨拙的。不管怎样,你的表现都会很差。
Select * from t2 inner join t3
ON t2.E=T3.E and
TRY_CAST(t2.E As INT) IS NOT NULL