2017-04-12 43 views
-2

我有三個表,T1,T2,T3內部聯接與髒數據的三個表的SQL Server中

  • T1具有列A,B,C
  • T2具有列C,d,E
  • T3具有E,F,G柱

的想法是內加入所有這些得到表T與A,B,C,d,E,F,G

我已經列現在如何做三個表的連接,問題是應該連接T2和T3的列E非常嘈雜,它應該是一個數值,但它具有各種值(文本,標點符號等)

我將如何使用if語句來執行內部連接?

下面是塔E的例子:

  • 在表T2:10000001,$ 4542,,1892348,2347239( '' 噪聲是$ 4542和)
  • 在表T3:10000001,1892348, 2347239(表3是相當乾淨)

的想法是隻匹配是數字值,但標準JOIN休息,因爲它不能轉換爲$ 4542爲int

+2

提供樣品數據和預期結果。 –

+0

你能否提供E欄的例子,以便我們更好地協助?您可以使用值替換或條件案例作爲連接條件,但雖然性能會受到影響,但不知道數據差異的程度將難以提供幫助。 – engineersmnky

+0

非數字字符的集合是否可預測並設置爲石制?換句話說,它是一組字符,如「$」,「。」,也許是「_」?如果是這樣,你可以輕鬆地去掉那些已知的角色來完成你的加入。但是,如果它是不可預測的,或者是一個非常大的集合,那將是笨拙的。無論哪種方式,你都會有糟糕的表現。 – pmbAustin

回答

1

用戶TR y_cast同時進行連接以消除非數字值。我在t2上做了一個壞數據的小提琴,但是你也可以將它擴展到其他表。

http://sqlfiddle.com/#!6/0f4b7/4

Select * from t2 inner join t3 
ON t2.E=T3.E and 
TRY_CAST(t2.E As INT) IS NOT NULL 
0

你能澄清一兩件事。您想要排除嘈雜的記錄,或者您需要在刪除特殊字符後加入它。

這可以通過案例和patindex我相信。