0

我在 SQL Server 中有一个表,其中包含一个ID和一个列,其中包含多个用逗号分隔的值(如下例所示)

ID        Category_number
-------------------------
1           3,5,6,8
2            4,8,23
3           4,7,5,3

我需要把它做成一个查找表,每行有 1 个类别号,如下所示;

ID        Category_Number
-------------------------
1               3
1               5
1               6

有人告诉我 XPATH 可能是解决此问题的方法。有没有人有任何示例代码可以做到这一点?

谢谢

4

3 回答 3

2

看到这个答案拆分

在您的数据库中创建该函数。

然后您可以使用以下方法创建您想要的结果:

SELECT
    ID,
    A.S Category_Number
FROM
    MyCsvTable
    CROSS APPLY dbo.Split (',', MyCsvTable.Category_Number) A
于 2013-02-13T14:38:54.633 回答
2

我知道您刚刚接受了该解决方案,但假设您使用的是 SQL Server,这是一种无需构建函数的替代方法:

 SELECT A.[id],  
         Split.a.value('.', 'VARCHAR(100)') AS Cat  
       FROM  
          (SELECT [id],  
             CAST ('<M>' + REPLACE(Cat, ',', '</M><M>') + '</M>' AS XML) AS String  
          FROM  YourTable
      ) AS A 
    CROSS APPLY String.nodes ('/M') AS Split(a)

还有一些小提琴:http ://sqlfiddle.com/#!3/cf427/3

祝你好运!

于 2013-02-13T14:46:39.427 回答
0

您可能还想检查 SQL SERVER 中的 HierarchyID。一些教程:http ://www.codeproject.com/Articles/37171/HierarchyID-Data-Type-in​​-SQL-Server-2008

基本上你需要做的就是遍历字符串并找到逗号的位置并将它们替换为 chr(13) 等。在 Oracle 中,它可以在单个查询中轻松完成。我认为从 2008 年甚至更早的版本开始,在 SQL Server 中使用 HierarchyID 也可以做到这一点。

于 2013-02-13T15:58:31.017 回答