2016-03-23 23 views
0

'daki farklı satırlara aktarma "Database Administrator" da benzer bir soru sordum, ancak ne yazık ki kimse soruyu yanıtlamadı; bu nedenle verileri aktarmaya karar verdim.Bir sütunda virgülle ayrılmış değerleri MySQL

------------------------------------------------------ 
Parts | Owner | Number | Item_ID | ... 
------------------------------------------------------ 
PartB | Adam | 4  | Item_a,Item_b,Item_z,... 
ConD  | Steve | 2  | Item_b,Item_c,Item_g,... 

bir ayrı bir satır olarak her bir değeri için istediği:

Böyle bir tablo bilgisi

------------------------------------------------------ 
Parts | Owner | Number | Item_ID | ... 
------------------------------------------------------ 
PartB | Adam | 4  | Item_a 
PartB | Adam | 4  | Item_b 
PartB | Adam | 4  | Item_z 
ConD  | Steve | 2  | Item_b 
ConD  | Steve | 2  | Item_c 
ConD  | Steve | 2  | Item_g 

this answer dayanarak, güvenilir:

SELECT Parts, 
     Owner, 
     Split.a.value('.', 'VARCHAR(100)') Item_ID 
FROM (SELECT Parts, 
       Owner, 
       Cast ('<M>' + Replace(Item_ID, ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM Table_1) AS A 
     CROSS APPLY Data.nodes ('/M') AS Split(a) 

Ama bir hata alıyorum:

You have an error in your SQL syntax...near '('.', 'VARCHAR(100)')... 

cevap

0

C# gibi 3. parti bir dil ile kolayca yapılabilir, çünkü yalnızca bir kez çalıştırmanız gerekir. Ve bu örnekte Dapper gibi hafif bir ORM ile daha da kolay:

[Table("TableA")] 
class table { 
    [Key] 
    int id {get; set;} 
    string Parts {get; set;} 
    string Owner {get; set;} 
    int Number {get; set;} 
    string Item_ID {get; set;} 
    ... 
} 

[Table("TableB")] 
class newtable { 
    [Key] 
    int id {get; set;} 
    string Parts {get; set;} 
    string Owner {get; set;} 
    int Number {get; set;} 
    string Item_ID {get; set;} 
    ... 
} 

Func<SqlConnection> conn =() => new SqlConnection("Data Source=127.0.0.1; Initial Catalog=;User Id=root;Password=***"); 
var newdata = new List<newtable>(); 
foreach (var d in conn().Query<table>("Select * FROM table")) 
{ 
    foreach (var cd in d.Item_ID.Split(',')) 
    { 
     newdata.Add(new newtable() { Parts = d.Parts, Owner = d.Owner, Number = d.Number, Item_ID = cd.Trim(), ... }); 
    } 
} 

//insert the new datas 
foreach (var data in newdata) { 
    conn().Insert(data); 
} 
+0

Ben bir select deyimi olarak yapmaya çalıştığım başka programda çalıştırılmak üzere –

İlgili konular