回答

收藏

将行合并为列

技术问答 技术问答 173 人阅读 | 0 人回复 | 2023-09-12

遇到以下情况(严重抽象,请忽略不良设计):
5 L( _5 |! B. H4 F- r6 w/ sCREATE TABLE dbo.PersonTest (Id INT,name VARCHAR(255))INSERT INTO dbo.PersonTest        (Id,name )VALUES  (1,'Pete Marie Sam Daisy')我正在寻找以下结果:
0 M& G! }5 |% ~4 A% BId  Name1   Name21   Marie   Pete2   Daisy   Sam所以,对于每一个ID,应合并行。
& |( p. l5 @8 [6 R5 Q为了获得这个结果,我使用以下查询:
) |0 A  L4 h5 o% vWITH PersonRN AS(    SELECT  *      ROW_NUMBER() OVER(PARTITION BY Id ORDER BY name) RN    FROM    dbo.PersonTest)SELECT      PT1.Id,          PT1.name Name1.         PT2.name Name2FROM        PersonRN AS PT1LEFT JOIN   PersonRN AS PT2 -- Left join in case there's only 1 name        ON  PT2.Id = PT1.Id        AND PT2.RN = 2WHERE       PT1.RN = 1哪个工作很好。# F3 H$ _4 W1 v5 ]8 Y1 O. T
我的问题是:这是最好的方法(性能和弹性最好)吗?比如这些ID其中一个有第三名,所以我的查询会忽略第三名。解决这个问题的最好方法是动态SQL,这很好,但如果能在没有动态的情况下完成,那么我更愿意这样做。
) y0 i+ `. z) q& V+ Q                                                                " ]8 X' N2 |% w" @/ n$ A
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则