我有一個由列名富&酒吧其中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中操作?
我有一個由列名富&酒吧其中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中操作?
謝謝大家。即使我不懂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);
你在這裏有一個標準的1對多關係。所以你有許多酒吧1美孚。所以你需要在這裏使用第二範式來保存你的數據(2NF)。
下面是一個SO文章,解釋爲字符串列的值分成喜歡你行的最好辦法想: Turning a Comma Separated string into individual rows
你沒有指定DBMS所以這是Postgres的:
select t.foo, b.bar
from the_table t,
unnest(string_to_array(t.bar, '~')) as b(bar);
您使用的RDBMS是什麼?例如,mySql的答案可能與Sql server的答案不同。請編輯您的問題以包含相關數據庫和您正在使用的相關版本。 –
對不起。我正在使用T-SQL – Jim