我有一张表,为了我们的目的,这里有2列,第一列代表第二列中的组。这不是传统的数据分组方式,但这是我必须要处理的。以下是该表的测试视图:
mfr_code | group
ABC | ABC,FFF,XYZ
DEF | DEF,GGG
GHI | GHI,PPP,RRR
我需要一个链接到mfr_code列的JOIN,然后确定第二列中的所有单个mfr_codes。
此表将加入的表格如下所示:
from_catcode | partno | mfr_code
DORC | 1234 | ABC
加入后,我需要能够生成一个看起来像这样的表:
from_catcode | partno | mfr_code
DORC | 1234 | ABC
DORC | 1234 | FFF
DORC | 1234 | XYZ
我一直在试图弄清楚如何解析这个多值列,但我担心循环是不切实际的,因为我们讨论的是循环遍历两个表的每个记录,一个在另一个内,对于成千上万的记录。
任何有关我可以进一步研究的见解或方向都会有所帮助。
答案 0 :(得分:1)
您可以在单个语句中拆分和加入表。请尝试下面的代码
DECLARE @MrfDesc TABLE
(
mrf_code varchar(10), groups varchar(50)
)
INSERT INTO @MrfDesc VALUES
('ABC','ABC,FFF,XYZ'),
('DEF','DEF,GGG'),
('GHI','GHI,PPP,RRR')
DECLARE @mrfMajor TABLE (from_catcode varchar(20) , partno INT , mfr_code varchar(10))
INSERT INTO @MrfMajor VALUES('DORC',1234,'ABC')
SELECT MMajor.from_catcode, MMajor.partno, subset.Certs FROM @mrfMajor MMajor JOIN (
SELECT mrf_code,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs
FROM
(SELECT mrf_code,CAST('<XMLRoot><RowData>' +
REPLACE(groups,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM @MrfDesc)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n) ) subset
ON subset.mrf_code = MMajor.mfr_code