我有一个包含128 000封独特电子邮件的Excel文件。每封电子邮件都可以包含多个产品ID,但产品代码全部存储在1个单元格中,以分号分隔。
Email Product_id
XXXX@... ;16;411;75;
yyyy@... ;3242;
zzzz@... ;58;411;16;65;24;
我想将产品数据规范化为一个单独的表格,如下所示:
email product_id
XXXX@... 16
XXXX@... 411
XXXX@... 75
yyyy@... 3242
zzzz@... 58
zzzz@... 411
zzzz@... 16
zzzz@... 65
zzzz@... 24
对这些数据进行规范化有哪些可能的解决方案?我应该使用哪些工具/程序?
答案 0 :(得分:0)
使用此SQL-Server查询,您可以获得所需的列表。您可以使用SELECT col1, col2 INTO NewTable FROM ...
语法立即将结果写入表中。
DECLARE @tbl TABLE(Email VARCHAR(100),Product_id VARCHAR(100));
INSERT INTO @tbl VALUES
('XXXX@...',';16;411;75;')
,('yyyy@...',';3242;')
,('zzzz@...',';58;411;16;65;24;');
WITH Splitted AS
(
SELECT Email
,CAST('<x>'+REPLACE(Product_id,';','</x><x>') + '</x>' AS XML) AS ID_Splitted
FROM @tbl AS tbl
)
SELECT EMail
,id_split.value('.','int') AS id
FROM Splitted
CROSS APPLY ID_Splitted.nodes('/x[text()!=""]') AS A(id_split);
结果
EMail id
XXXX@... 16
XXXX@... 411
XXXX@... 75
yyyy@... 3242
zzzz@... 58
zzzz@... 411
zzzz@... 16
zzzz@... 65
zzzz@... 24
我有点快,因为没有提示,你想使用SQL Server ......
在Excel中有一个非常好的功能&#34;列中的文字&#34;。你可以在&#34; Data&#34;菜单。 (至少我的德语版本称之为&#34; Daten&#34;以及&#34; Spalte中的文字&#34;)。在那里,您可以定义分隔符(在您的情况下是分号)并自动获取并行分割的值。某种unpivot
会创建一个一个低于其他列表