2017-08-09 94 views
0

我有一個查找表(表A)和一個存儲實際值(表B)的表。我現在面臨的問題是表B從表A.帶重複值的SQL Server查詢

所以,如果表A例如具有2列中存儲多個值(以逗號分隔):

Code Value 
------------ 
1  Dog 
2  Cat 
3  Bird 
4  Bear 

...和表B可有這樣的事情:

Record #  Code 
-------------------- 
1   2 
2   3,4 
3   1,4 
4   3 
5   1,2,3,4 

當我通過表B環,我想我的輸出看起來像這樣:

Record #   Code   Value 
------------------------------------- 
1    2   Cat 
2    3   Bird 
2    4   Bear 
3    1   Dog 
3    4   Bear 
4    3   Bird 
5    1   Dog 
5    2   Cat 
5    3   Bird 
5    4   Bear 

換句話說,我想要表B的記錄返回它與表A相同數量的逗號分隔值。

什麼是實現此目的的最佳和最有效的方式?

TIA, -TS。

+1

您需要包含DBMS類型和列類型的標籤請 – BShaps

+2

任何重構(又稱規範化)你的餐桌設計的機會? –

+0

嗨@BShaps TableA.Code =整數和TableB.Code = varchar – Tony

回答

1

如果你沒有(或希望)分流/解析功能,這裏是一個在線的方式

Select A.[Record #] 
     ,Code = B.RetVal 
     ,C.Value 
From TableB A 
Cross Apply (
       Select RetSeq = Row_Number() over (Order By (Select null)) 
         ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) 
       From (Select x = Cast('<x>' + replace(A.[Code],',','</x><x>')+'</x>' as xml).query('.')) as A 
       Cross Apply x.nodes('x') AS B(i) 
      ) B 
Join TableA C on B.RetVal=C.Code 

返回

enter image description here