使用 FOR XML 连接多个字段
Using FOR XML to Concatenate multiple fields
我的数据结构如下:
我正在尝试使用 STUFF/FOR XML PATH 来连接字段。
如果我使用我在网上找到的示例,我可以得到以下结果:
但我想知道以下是否可行:
我目前通过两次调用 FOR XML PATH 来实现这一点,首先是连接 Header3:
然后再次得到想要的结果。
有没有不用两次调用 XML PATH 就可以做到的方法?
你在寻找类似
的东西吗
CREATE TABLE T(
Header1 INT,
Header2 VARCHAR(45),
Header3 VARCHAR(45)
);
INSERT INTO T VALUES
(123, 'A', 'aaa'),
(123, 'B', 'bbb'),
(123, 'C', 'ccc'),
(123, 'C', 'ddd'),
(456, 'E', 'eee');
WITH H3 AS
(
SELECT DISTINCT Header1, Header2,
STUFF(
(
SELECT ',' + Header3
FROM T
WHERE Header2 = H2.Header2
FOR XML PATH('')
), 1, 1, ''
) Res
FROM T H2
)
SELECT DISTINCT
Header1,
STUFF(
(SELECT ' '+ Header2 + ':' + Res + '|'
FROM H3
WHERE Header1 = TT.Header1
FOR XML PATH('')
), 1, 1, ''
) Desired
FROM H3 TT;
Returns:
+---------+--------------------------+
| Header1 | Desired |
+---------+--------------------------+
| 123 | A:aaa| B:bbb| C:ccc,ddd| |
| 456 | E:eee| |
+---------+--------------------------+
我的数据结构如下:
我正在尝试使用 STUFF/FOR XML PATH 来连接字段。
如果我使用我在网上找到的示例,我可以得到以下结果:
但我想知道以下是否可行:
我目前通过两次调用 FOR XML PATH 来实现这一点,首先是连接 Header3:
然后再次得到想要的结果。
有没有不用两次调用 XML PATH 就可以做到的方法?
你在寻找类似
的东西吗CREATE TABLE T(
Header1 INT,
Header2 VARCHAR(45),
Header3 VARCHAR(45)
);
INSERT INTO T VALUES
(123, 'A', 'aaa'),
(123, 'B', 'bbb'),
(123, 'C', 'ccc'),
(123, 'C', 'ddd'),
(456, 'E', 'eee');
WITH H3 AS
(
SELECT DISTINCT Header1, Header2,
STUFF(
(
SELECT ',' + Header3
FROM T
WHERE Header2 = H2.Header2
FOR XML PATH('')
), 1, 1, ''
) Res
FROM T H2
)
SELECT DISTINCT
Header1,
STUFF(
(SELECT ' '+ Header2 + ':' + Res + '|'
FROM H3
WHERE Header1 = TT.Header1
FOR XML PATH('')
), 1, 1, ''
) Desired
FROM H3 TT;
Returns:
+---------+--------------------------+
| Header1 | Desired |
+---------+--------------------------+
| 123 | A:aaa| B:bbb| C:ccc,ddd| |
| 456 | E:eee| |
+---------+--------------------------+