具有重复值的SQL Server查询

时间:2017-08-09 21:41:04

标签: sql sql-server

我有一个查找表(表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。

1 个答案:

答案 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

<强>返回

enter image description here