2017-01-04 29 views
-1

我有一個由列名富&酒吧其中foo是一個唯一的ID和欄包含分隔多值由〜如何規範在一個單一領域的多值(SQL)

Foo Bar 
1 A~B~ 
2 A~C~D 
的表

我需要它被歸爲此類:

Foo Bar 
1 A 
1 B 
2 A 
2 C 
2 D 

雖然我可以從Excel通過分離文字柱,然後通過轉動做到這一點,這是不可行的,因爲我有100多萬條記錄和酒吧列最多可包含到12個不同的值。

有沒有一種簡單的方法可以直接從SQL中操作?

+2

您使用的RDBMS是什麼?例如,mySql的答案可能與Sql server的答案不同。請編輯您的問題以包含相關數據庫和您正在使用的相關版本。 –

+0

對不起。我正在使用T-SQL – Jim

回答

0

謝謝大家。即使我不懂XML或邏輯,下面的腳本仍然令人驚歎。

SELECT A.FOO,
Split.a.value( ' ' 'VARCHAR(100)')AS數據
FROM
( SELECT FOO,
CAST('' + REPLACE(BAR ,'','')+''AS XML)AS Data
FROM Table1 )AS AS CROSS APPLY Data.nodes('/ M')AS Split(a);

參考: Turning a Comma Separated string into individual rows

1

你沒有指定DBMS所以這是Postgres的:

select t.foo, b.bar 
from the_table t, 
    unnest(string_to_array(t.bar, '~')) as b(bar);