2016-01-22 81 views
0

我有兩個表TableATableBTable Bbar)中的一個字段需要拆分爲由','分隔的多個事物,並且各自從Table A加入相應的(foofield。這兩個表都有字段ThingID來自列的SQL拆分數據與來自不同表的數據合併

我已經設法將它結合在兩個表中的字段中,我需要使用下面的很多試驗和錯誤(SQL不是我的專業!)。任何指針將不勝感激。

;WITH A AS (SELECT ThingID, Name, Foo FROM dbo.TableA), 
     B AS (SELECT ThingID, Bar FROM dbo.TableB) 
SELECT COALESCE (A.ThingID, B.ThingID) AS ThingID, A.Name, A.Foo, B.Bar 
FROM A FULL OUTER JOIN B on A.ThingID = B.ThingID 

編輯:我有什麼和我需要什麼的例子。首先,我得到了什麼。

TableA      TableB 

ThingID | Name | Foo   ThingID | Bar 
--------|-------|-----  --------|----- 
    1230 | Aname | x12   1230 | x,x1,x2,x3 
    1231 | Bname | x13   1231 | x,x1 
    1232 | Cname | x14   1232 | x1,x2,x3 
    1233 | Dname | x15   1233 | x2 
    1234 | Ename | x16   1234 | x0,x1,x2 

我需要輸出什麼。

XLS FILE 

ThingID | Name | FooBar 
--------|-------|-------- 
    1230 | Aname | x12-x 
    1230 | Aname | x12-x1 
    1230 | Aname | x12-x2 
    1230 | Aname | x12-x3 
    1231 | Bname | x13-x 
    1231 | Bname | x13-x1 
    1232 | Cname | x14-x1 
    1232 | Cname | x14-x2 
    1232 | Cname | x14-x3 
    1233 | Dname | x15-x2 
    1234 | Ename | x16-x0 
    1234 | Ename | x16-x1 
    1234 | Ename | x16-x2 
+0

我不知道你在問什麼。具有預期產出的示例數據可能會有很大幫助。 http://stackoverflow.com/help/how-to-ask –

+0

你能提供一個數據例子和你的預期結果嗎? – DanK

+0

我用一個例子更新了我的問題 – mrcat

回答

0

你可能不會找到你的問題的滿意答案,因爲你的模式壞壞壞。在記錄的單個字段中有多個值,這是非常糟糕的設計,現在您想要將這些值分開,然後單獨加入它們。

你最好打賭就是修正你的模式,這樣你就可以做一個適當的連接並且使用你的RDBMS作爲RDBMS。

,而不是像這樣:

+---------+---------+ 
| thingid | bar | 
+---------+---------+ 
|  1 | a,b,c | 
|  2 | d,e,f | 
|  3 | a,c,e,f | 
+---------+---------+ 

用途:

+---------+-----+ 
| thingid | bar | 
+---------+-----+ 
|  1 | a | 
|  1 | b | 
|  1 | c | 
|  2 | d | 
|  2 | e | 
|  2 | f | 
|  3 | a | 
|  3 | c | 
|  3 | e | 
|  3 | f | 
+---------+-----+ 

把一些精力投入到ETL工作進入一個適當的表模式,這將還清比古怪的解決方法多很多你會發現試圖將這些單獨的記錄分成多個記錄。

如果你不得不將它們分開(因爲訪問原因或固執),那麼它可能有助於在sql server中研究「Split to Table」。有人寫了函數和其他解決方法來幫忙。他們會變得緩慢而笨拙,你可能會分裂成幾滴眼淚,試圖讓他們工作。