2016-08-15 8 views
0

SQLスキルはありますが、データベース設計はかなり新しいです。私はSQL ServerにアップロードしたいExcelシートを持っています。問題は、複数の値が「/」で区切られたExcelの列があることです。例えばExcelからExcelを使用したSQL Serverへのエクスポート複数の値の列

Fruit Banana/Pear/Orange Pear/Raspberry/... Banana

...

私は罰金やっている "/" に基づいて、セルを分割したいです。 SQL Serverのテーブルに値を配置します。しかし、Excelセルには「Fruits」が定義されていないので、複数のテーブルフィールドを許可する必要があります。

誰でもこれを行う方法に関する提案はありますか? ExcelからSQL ServerにエクスポートするためのADODB接続を作成しましたが、このセルの処理方法はわかりません。

答えて

2

になります。例えば

Declare @YourTable table (ID int,Fruit varchar(150)) 
Insert into @YourTable values 
(1,'Banana/Pear/Orange'), 
(2,'Pear/Raspberry/Apple'), 
(3,'Banana') 


Select A.ID 
     ,B.Key_Value 
From @YourTable A 
Cross Apply (Select * from [dbo].[udf-Str-Parse](A.Fruit,'/')) B 

戻り

ID Key_Value 
1 Banana 
1 Pear 
1 Orange 
2 Pear 
2 Raspberry 
2 Apple 
3 Banana 

UDF

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10)) 
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',') 
--  Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ') 

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max)) 
As 
Begin 
    Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML) 
    Insert Into @ReturnTable Select ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String) 
    Return 
End 
+0

ありがとうございました!私の実際のデータベースは果物の笑を少し複雑にしています。ありがとう – user3697498

+0

varcharで.valueを使用できますか? – user3697498

+0

@ user3697498はい –

0

Bridge Tableを使用していただきありがとうございます。このようにして、フルーツテーブルの各行はN個のタイプを持つことができます。テーブルタイプで

enter image description here

説明値は、別のオプションは、それがロードされた後にデータを分割することですバナナ、梨、オレンジ、ラズベリーなど

0

あなたがテーブルを設計するとき、それは列の定義された数を持っている必要があります。

最も簡単な方法は、各グループにIDを割り当てることです。

ID Fruit 
1 Banana 
1 Pear 
1 Orange 
2 Pear 
2 Raspberry 
3 Banana 
関連する問題