我有一个表,该表的列包含逗号分隔的值,我想通过从另一个表获取ID来拆分行。
订单号:1234
字段名称:Car_name
汽车A,汽车B
Order_Id:1 订单号:1234
1辆车A 1辆车B
如何在t-sql中实现此目标?
谢谢
答案 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;