您将需要使用CTE压平了这一点。
这应该直接插入到SQL中,并使用给出的数据作为示例。显然,你将需要更新的查询为您真实的数据,因为这可能是不是你真正的模式
create table #tableA (ID int, [rank] int, name varchar(max))
insert into #tableA values(1,100,'Name1')
insert into #tableA values(1,45,'Name2')
insert into #tableA values(2,60,'Name3')
insert into #tableA values(2,42,'Name4')
insert into #tableA values(2,88,'Name5')
insert into #tableA values(3,50,'Name6')
insert into #tableA values(3,50,'Name7')
create table #tableB (ID int, [FileName] varchar(max))
insert into #tableB values(1,'fn1')
insert into #tableB values(2,'fn2')
insert into #tableB values(3,'fn3')
SELECT B.*,A.Name, ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.[rank]) AS RowNum
INTO #RankedTable
FROM #tableB as B
LEFT JOIN (
SELECT A.Id, MAX(A.Rank)as Rank
FROM #tableA AS A
GROUP BY A.Id
) AS NewA
JOIN #tableA AS A
on A.Rank = NewA.Rank
AND A.ID = NewA.Id
on NewA.ID = B.ID
;WITH ConcatenationCTE (ID, [FileName], Name, RowNum)
AS
(
SELECT ID, [FileName], Name, RowNum
FROM #RankedTable
WHERE RowNum = 1
UNION ALL
SELECT #RankedTable.ID, #RankedTable.[FileName],
ConcatenationCTE.Name + ',' + #RankedTable.Name AS Name,
#RankedTable.RowNum
FROM #RankedTable
JOIN ConcatenationCTE
ON ConcatenationCTE.ID = #RankedTable.ID
AND ConcatenationCTE.RowNum +1 = #RankedTable.RowNum
)
SELECT ConcatenationCTE.ID, [FileName], Name
FROM ConcatenationCTE
JOIN
(SELECT ID, MAX(RowNum) AS RowNum
FROM ConcatenationCTE GROUP BY ID) AS FinalValues
ON FinalValues.ID = ConcatenationCTE.ID
AND FinalValues.RowNum = ConcatenationCTE.RowNum
Wnat RDBMS试试您使用的? – 2012-02-28 03:19:33
sql server 2008 R2 – user393148 2012-02-28 03:19:58
Sql服务器组连接 - 这是一个频繁的SO问题:http://stackoverflow.com/questions/941103/concat-groups-in-sql-server – 2012-02-28 03:24:12