Sql server SQL Server:按字符串连接分组
我有个问题。我知道以前有人问过这个问题。我查看了相关的问题,但无法使我的SQL脚本正常工作 我的问题是:Sql server SQL Server:按字符串连接分组,sql-server,group-by,concatenation,for-xml-path,Sql Server,Group By,Concatenation,For Xml Path,我有个问题。我知道以前有人问过这个问题。我查看了相关的问题,但无法使我的SQL脚本正常工作 我的问题是: SELECT T1.PART_ID, T2.ID, T2.DESCRIPTION FROM #TEMP T1 INNER JOIN #TEMP2 T2 ON T1.PART_ID = T2.PART_ID ORDER BY T2.ID 表: PART_ID | ID | DESCRIPTION ---------------------------------- 1
SELECT T1.PART_ID, T2.ID, T2.DESCRIPTION
FROM #TEMP T1
INNER JOIN #TEMP2 T2 ON T1.PART_ID = T2.PART_ID
ORDER BY T2.ID
表:
PART_ID | ID | DESCRIPTION
----------------------------------
10002 | 1182505 | Tagfahrlichtschaltung
80029 | 1182505 | Bluetooth
20004 | 1212866 | Kindersitzbefestigung
10045 | 1212866 | Lederlenkradrriegelung
11908 | 1257946 | Airbag
22346 | 1257946 | Automatic
我希望得到如下结果:
ID | LISTOFPARTS
-----------------------------
1182505 | "10002 : Tagfahrlichtschaltung ; 80029 : Bluetooth "
1212866 | "20004 : Kindersitzbefestigung ; 10045 : Lederlenkradrriegelung"
1257946 | "11908 : AIRBAG ; 22346 : AUTOMATIC"
我想这一定是XML路径的问题,但我无法让它工作。
是否有人可以重写查询,使其以字符串的形式返回分组和连接的结果
有或没有XML路径的解决方案将受到赞赏
谢谢
这将有助于:
DECLARE @TABLE TABLE (PART_ID INT,ID INT, DESCRIPTION VARCHAR(100))
INSERT INTO @TABLE
VALUES
(10002 ,1182505 , 'Tagfahrlichtschaltung')
,(80029 , 1182505 , 'Bluetooth')
,(20004 , 1212866 , 'Kindersitzbefestigung')
,(10045 , 1212866 , 'Lederlenkradrriegelung')
,(11908 , 1257946 , 'Airbag')
,(22346 , 1257946 , 'Automatic')
;WITH SUBQUERY
AS
(
SELECT ID,(CAST(PART_ID AS VARCHAR(12)) + ' : ' + DESCRIPTION) 'CONCATED'
FROM @TABLE
)
SELECT ID, LEFT(pre_trimmed.CONCATED , LEN(pre_trimmed.CONCATED )-1) AS LISTOFPARTS
FROM SUBQUERY AS extern
CROSS APPLY
(
SELECT CONCATED + ','
FROM SUBQUERY AS intern
WHERE extern.ID = intern.ID
FOR XML PATH('')
) pre_trimmed (CONCATED)
GROUP BY ID, pre_trimmed.CONCATED
建议:在中发布您的模式,以使我们更轻松*编辑-这可能与您的问题有关:1您是否加入了错误的领域?ID似乎是相同的,而不是零件号。Id是车辆Id。PartID是部件的id。PartID在汽车和汽车零件表中很常见。描述取自CAR_PARTS表,并连接以查找汽车拥有的零件(描述)。
DECLARE @TABLE TABLE (PART_ID INT,ID INT, DESCRIPTION VARCHAR(100))
INSERT INTO @TABLE
VALUES
(10002 ,1182505 , 'Tagfahrlichtschaltung')
,(80029 , 1182505 , 'Bluetooth')
,(20004 , 1212866 , 'Kindersitzbefestigung')
,(10045 , 1212866 , 'Lederlenkradrriegelung')
,(11908 , 1257946 , 'Airbag')
,(22346 , 1257946 , 'Automatic')
;WITH SUBQUERY
AS
(
SELECT ID,(CAST(PART_ID AS VARCHAR(12)) + ' : ' + DESCRIPTION) 'CONCATED'
FROM @TABLE
)
SELECT ID, LEFT(pre_trimmed.CONCATED , LEN(pre_trimmed.CONCATED )-1) AS LISTOFPARTS
FROM SUBQUERY AS extern
CROSS APPLY
(
SELECT CONCATED + ','
FROM SUBQUERY AS intern
WHERE extern.ID = intern.ID
FOR XML PATH('')
) pre_trimmed (CONCATED)
GROUP BY ID, pre_trimmed.CONCATED