将一个表中用逗号分隔的列拆分为另一张表中的行

时间:2019-07-11 15:11:49

标签: sql sql-server

我有一个表,该表的列包含逗号分隔的值,我想通过从另一个表获取ID来拆分行。

表A:

订单号:1234

字段名称:Car_name

汽车A,汽车B

表B:

Order_Id:1 订单号:1234

表车名

1辆车A 1辆车B

如何在t-sql中实现此目标?

谢谢

1 个答案:

答案 0 :(得分:0)

以下解决方案是我对您想要的东西的猜测,因为我不清楚您想要什么作为输出。我认为您想为Car_name中的每辆汽车都添加一个新行,并在其前面添加Order_Id。这样的事情(我添加了另一组记录以确保它可以处理多组记录)。

Order_Id  Car_name
--------  --------
1         Car A
1         Car B
2         Car C
2         Car D
2         Car E

您将需要从http://www.sqlservercentral.com/articles/Tally+Table/72993/安装DelimitedSplit8K函数,或者可以使用选择的字符串分割功能。我已将其安装到master数据库中,但您可以将其放置在所需的位置,只需记住更改查询以使其匹配即可。

CREATE TABLE #TableA (Order# Int, Car_name Varchar(50));

CREATE TABLE #TableB (Order_Id Int, Order# Int);

INSERT #TableA(Order#, Car_name)VALUES(1234, 'Car A, Car B'), (321, 'Car C, Car D, Car E');

INSERT #TableB(Order_Id, Order#)VALUES(1, 1234), (2, 321);

SELECT
    b.Order_Id,
    LTRIM(split.Item) AS Car_name -- LTRIM is used to remove the space after the comma in the original string
FROM
    #TableA a
JOIN
    #TableB b
    ON a.Order# = b.Order#
CROSS APPLY master.dbo.DelimitedSplit8K(a.Car_name, ',') split;

DROP TABLE #TableA;
DROP TABLE #TableB;