在SQL数据透视中,如何获取带有逗号分隔数据的单列

在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

下面是我的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 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更好。您可以从表中发布数据吗?不是查询结果的数据。