既存の表は、このように見えるにパス列をブレークダウンSQL:は、階層データ
Categories
----------------------------------------------
Drinks\Soda
Drinks\Juice\Fruit Juice\Apple Juice\Sugar Free
Food\Fruit\Oranges
Food\Fruit\Apples\Golden
Food\Fruit\Apples\Red Delicious
Food\Vegetables\Potatoes
Food\Meat
Food
そして、私はこのように、階層データテーブルにそれを処理する必要があります。
Id | ParentId | Category | Full path
------------------------------------------
1 | null | Drinks | Drinks
2 | 1 | Soda | Drinks\Soda
3 | 1 | Juice | Drinks\Juice
4 | 3 | Fruit Juice | Drinks\Juice\Fruit Juice
5 | 4 | Apple Juice | Drinks\Juice\Fruit Juice\Apple Juice
6 | 5 | Sugar Free | Drinks\Juice\Fruit Juice\Apple Juice\Sugar Free
7 | null | Food | Food
8 | 7 | Fruit | Food\Fruit
9 | 8 | Oranges | Food\Fruit\Oranges
10 | 8 | Apple | Food\Fruit\Apples
私は
私は十字架を適用していたと思っていましたが、各親に対して複数の行が得られました。私は必要なものではない以下の表のようになります:
Category | Full path
------------------------------------------
Drinks | Drinks\Soda
Soda | Drinks\Soda
Drinks | Drinks\Juice
Juice | Drinks\Juice
編集:これは私がこれまで持っているものです。
CREATE TABLE [dbo].[food_categories3](
[id] [int] NOT NULL,
[category] [varchar](350) NULL)
insert into food_categories3
values
(1,'Drinks\Soda'),
(2,'Drinks\Juice\Fruit Juice\Apple Juice\Sugar Free'),
(3,'Food\Fruit\Oranges'),
(4,'Food\Fruit\Apples\Golden'),
(5,'Food\Fruit\Apples\Red Delicious'),
(6,'Food\Vegetables\Potatoes'),
(7, 'Food\Meat'),
(8,'Food')
select * from food_categories3
SELECT distinct X.category,
splitted.x.value('.', 'VARCHAR(100)') AS cat
FROM (SELECT category,
CAST ('<M>' + REPLACE(category, '\', '</M><M>') + '</M>' AS XML) AS cat
FROM food_categories3) AS X CROSS APPLY cat.nodes ('/M') AS splitted(x)
order by category
はまた、私の実際のデータセットはフルーツのカテゴリに関するものではありません、これは私のデータが構成されているかの単純な例です。 。
編集2:どのように私はオレンジやリンゴの両方が、「フルーツ」の子であることを伝えることができるように私の主な質問は今、子供を挿入するとき、親行を追跡する方法、です。
を見つけることがあまりにもハード、あなたがこれまでに作ったものな努力のコードを共有することはできますか? – ViKiNG
まず、分割機能が必要です。ネット上に十分なものがあり、それを探してください。 –
はい私は既にデータを分割し、問題を実行可能な例で更新しました。 – rememberthecant