我有一个查找表(表A)和一个存储实际值的表(表B)。我面临的问题是表B可以存储表A中的多个值(以逗号分隔)。
因此,如果表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。
答案 0 :(得分: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
<强>返回强>