0
串联单列我使用2008年SSMS并试图串连在一起,根据不同领域的分组行之一。我有两列,people_id和address_desc。他们看起来像这样:在TSQL
address_desc people_id
---------- ------------
Murfreesboro, TN 37130 F15D1135-9947-4F66-B778-00E43EC44B9E
11 Mohawk Rd., Burlington, MA 01803 C561918F-C2E9-4507-BD7C-00FB688D2D6E
Unknown, UN 00000 C561918F-C2E9-4507-BD7C-00FB688D2D6E Jacksonville, NC 28546 FC7C78CD-8AEA-4C8E-B93D-010BF8E4176D
Memphis, TN 38133 8ED8C601-5D35-4EB7-9217-012905D6E9F1
44 Maverick St., Fitchburg, MA 8ED8C601-5D35-4EB7-9217-012905D6E9F1
现在我想连接address_desc字段/ people_id。因此,第一个应该在address_desc上显示“Murfreesboro,TN 37130”。但第二个人应该只有一行,而不是两个,其中地址_desc为“Mohawk Rd。,Burlington,MA 01803; Unknown,UN 00000”。
我该怎么做?我试着用CTE,但是这是给我多义性错误:
WITH CTE (people_id, address_list, address_desc, length )
AS (SELECT people_id, CAST('' AS VARCHAR(8000)), CAST('' AS VARCHAR(8000)), 0
FROM dbo.address_view
GROUP BY people_id
UNION ALL
SELECT p.people_id, CAST(address_list +
CASE WHEN length = 0 THEN '' ELSE ', ' END + c.address_desc AS VARCHAR(8000)),
CAST(c.address_desc AS VARCHAR(8000)), length + 1
FROM CTE c
INNER JOIN dbo.address_view p
ON c.people_id = p.people_id
WHERE p.address_desc > c.address_desc)
SELECT people_id, address_list
FROM (SELECT people_id, address_list,
RANK() OVER (PARTITION BY people_id ORDER BY length DESC)
FROM CTE) D (people_id, address_list, rank)
WHERE rank = 1 ;
这是我最初的SQL查询:
SELECT a.address_desc, a.people_id
FROM dbo.address_view a
INNER JOIN (SELECT people_id
FROM dbo.address_view
GROUP BY people_id
HAVING COUNT(*) > 1) t
ON a.people_id = t.people_id
order by a.people_id
超!正是我需要的。谢谢! – salvationishere