填充值看起来像类似的连接值

时间:2015-04-17 13:36:29

标签: sql sql-server-2008-r2

我不知道如何处理以下问题

我有一个列,其中的值可以是' T-00513153'但有时候这个价值会与更多的价值联系在一起,例如T-00513153,T-00513154'而我想要实现的是,如果价值是' T-00513153'或者' T-00513154'在另一行中,该值是连续值,例如T-00513153,T-00513100'然后对于每个未经处理的值使用该连接值,以便更好地理解我发布的示例

enter image description here

也许有一些subselect,看看Element值是否在同一列中的任何值内(foreaching all table),如果是,则使用最长的字符串,但我觉得这种方法可能有性能问题,任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

是的,我认为你可以完成你想要的。以下查询查找与任何给定元素匹配的最长元素:

select s.number, longest.element, s.val1, s.val2      
from source s cross apply
     (select top 1 s2.element
      from source s2
      where s2.element like s.element + '%'
      order by len(s2.element) desc
     ) longest;

您也可以使用相关子查询执行此操作。

注意:在分隔字段中存储事物列表是个坏主意。您应该有一个单独的联结表,每个数字和每个元素一行。这将使这种操作更有效率。