簡體   English   中英

如何使用基於ID的SQL Server中的列獲取行值

[英]How to get row values in to columns in sql server with based on id

我有下表:

id         Prefix     FisrtName     LastName
--------------------------------------------
123        Mr          Lynn         Berg
123        Ms          Madeline     Owen      
123        Mrs         Zelenia     Sellers  
101        Mrs         Jesse       Vincent
101        Mr          Chaim        Long  

結果表應如下所示

id         name1              name2               name2
-----------------------------------------------------------
123        Mr Lynn Berg       Ms MadelineOwen     Mrs Zelenia Sellers         
101        Mrs Jesse Vincent  Mr Chaim Long    

如何在SQL Server中獲得此結果? 我可以使用支點功能嗎?

請幫忙

您還可以進行條件聚合:

select id, max(case when seq = 1 then Name end) as Name1,
           max(case when seq = 2 then Name end) as Name2,
           max(case when seq = 3 then Name end) as Name3
from (select id, concat(Prefix,' ',FisrtName,' ',LastName) as Name, 
             row_number() over (partition by id order by (select null)) as seq 
      from table
     ) t
group by id;

嘗試以下簡單的方法:

declare @tbl table (id int, Prefix varchar(3), FirstName varchar(20), LastName varchar(20));
insert into @tbl values
(123, 'Mr', 'Lynn', 'Berg'),
(123, 'Ms', 'Madeline', 'Owen'),      
(123, 'Mrs', 'Zelenia', 'Sellers'),  
(101, 'Mrs', 'Jesse', 'Vincent'),
(101, 'Mr', 'Chaim', 'Long');  

select id, [1] [Name1], [2] [Name2], [3] [Name3] from (
    select id, 
           ROW_NUMBER() over (partition by id order by (select null)) rn,
           Prefix + ' ' + FirstName + ' ' + LastName [FullName] 
    from @tbl
) a pivot (
    max(fullname) for rn in ([1],[2],[3])
) b;
CREATE TABLE #Table1 (
    id INT
    ,Prefix VARCHAR(3)
    ,FisrtName VARCHAR(8)
    ,LastName VARCHAR(7)
    );

INSERT INTO #Table1
VALUES (
    123
    ,'Mr'
    ,'Lynn'
    ,'Berg'
    )
    ,(
    123
    ,'Ms'
    ,'Madeline'
    ,'Owen'
    )
    ,(
    123
    ,'Mrs'
    ,'Zelenia'
    ,'Sellers'
    )
    ,(
    101
    ,'Mrs'
    ,'Jesse'
    ,'Vincent'
    )
    ,(
    101
    ,'Mr'
    ,'Chaim'
    ,'Long'
    )

SELECT *
FROM #Table1

SELECT id
    ,[1] [Name1]
    ,[2] [Name2]
    ,[3] [Name3]
FROM (
    SELECT id
        ,CONCAT (
            PREFIX
            ,FISRTNAME
            ,LASTNAME
            ) AS Namm
        ,ROW_NUMBER() OVER (
            PARTITION BY id ORDER BY (
                id
                    )
            ) AS rn
    FROM #TABLE1
    ) a
pivot(max(Namm) FOR rn IN (
            [1]
            ,[2]
            ,[3]
            )) b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM