0

IDコンマで区切られた複数の値を持つ列を含む SQL Server のテーブルがあります (以下の例のように)

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 に答える