在SQL数据透视中,如何获取带有逗号分隔数据的单列
下面是我的pivot查询在SQL数据透视中,如何获取带有逗号分隔数据的单列,sql,pivot,Sql,Pivot,下面是我的pivot查询 Select MID, [1] as AthleteName1st, [2] as AthleteName2nd, [3] as AthleteName3rdPoint from( select MId, AthleteId , Position, (row_number() over(partition by Position ,R.EventCode,MId order by Position)) rn from L_Results R where
Select MID, [1] as AthleteName1st,
[2] as AthleteName2nd,
[3] as AthleteName3rdPoint
from(
select MId, AthleteId , Position,
(row_number() over(partition by Position ,R.EventCode,MId order by Position)) rn
from L_Results R
where R.EventCode = '040' and R.Season = (select Season from L_SeasonTable) and Position in (1,2,3)
) src
pivot
(
max([AthleteId])
for Position in ([1] ,[2] , [3])
) piv
我得到的结果:
MID AthleteName1st AthleteName2nd AthleteName3rdPoint
65 14231808 14201894 14202005
122 14238588 14238562 14186000
178 14238588 14231808 14201894
234 14201847 14201894 14367591
346 14201847 14202176 14186000
374 14201847 14202176 14201912
402 14202176 14249856 14201894
402 14201848 NULL NULL
MID AthleteName1st AthleteName2nd AthleteName3rdPoint
65 14231808 14201894 14202005
122 14238588 14238562 14186000
178 14238588 14231808 14201894
234 14201847 14201894 14367591
346 14201847 14202176 14186000
374 14201847 14202176 14201912
402 14202176, 14249856 14201894
14201848
所需结果为:
MID AthleteName1st AthleteName2nd AthleteName3rdPoint
65 14231808 14201894 14202005
122 14238588 14238562 14186000
178 14238588 14231808 14201894
234 14201847 14201894 14367591
346 14201847 14202176 14186000
374 14201847 14202176 14201912
402 14202176 14249856 14201894
402 14201848 NULL NULL
MID AthleteName1st AthleteName2nd AthleteName3rdPoint
65 14231808 14201894 14202005
122 14238588 14238562 14186000
178 14238588 14231808 14201894
234 14201847 14201894 14367591
346 14201847 14202176 14186000
374 14201847 14202176 14201912
402 14202176, 14249856 14201894
14201848
在pivot查询中,我只从L_结果表中检索第一、第二和第三位置的数据,
在402年中期的L_结果表中,对于第一个职位,我有两条记录,即为什么我得到
“402”中期的2项结果记录。。
在上面的例子中,我需要得到如上所示的结果,对于MID'402'只有一条记录
我真的很感谢你的帮助。。。谢谢由于子查询
src
中的列rn
,您将获得多行,您从未使用此列,但因为它存在于源中,所以在透视的隐含组中使用它。因此,对于Mid=2,运动员14202176和14201848的位置均为=1
您需要以每中间/位置组合一条记录的格式获取数据,您可以使用sql server的XML扩展将运动员ID连接到逗号分隔的字符串中。然后,您可以将它们转换为所需的格式:
WITH Data AS
( SELECT MId,
AthleteId,
Position
FROM L_Results R
WHERE R.EventCode = '040'
AND R.Season = (SELECT Season FROM L_SeasonTable)
AND Position IN (1, 2 ,3)
), PivotData AS
( SELECT t.Mid,
t.Position,
Athletes = STUFF(( SELECT ',' + CAST(AthleteID AS VARCHAR)
FROM Data t2
WHERE t.Mid = t2.Mid
AND t.Position = t2.Position
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM ( SELECT DISTINCT Mid, Position
FROM Data
) t
)
SELECT MID,
AthleteName1st = [1],
AthleteName2nd = [2],
AthleteName3rdPoint = [3]
FROM PivotData
PIVOT
( MAX(Athletes)
FOR Position IN ([1], [2], [3])
) pvt;
请指定数据库及其确切版本。示例数据也会有帮助,SQLFIDLE更好。您可以从表中发布数据吗?不是查询结果的数据。