您將需要使用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