Sql 如何将表中的2行合并为1行,并根据第三列将其作为标题

Sql 如何将表中的2行合并为1行,并根据第三列将其作为标题,sql,sql-server,Sql,Sql Server,net mvc,所以作为我学习的一部分,我遇到了这种情况 我在临时表中有一个查询的输出,如下所示 Reporting To Manager UserType ---------------------------------------------------------------------------------- VEDAYyyar H ( MI124557 ) P KUMAR ( N

net mvc,所以作为我学习的一部分,我遇到了这种情况 我在临时表中有一个查询的输出,如下所示

       Reporting To                   Manager                        UserType
----------------------------------------------------------------------------------
VEDAYyyar H ( MI124557 )    P  KUMAR ( N156787 )       ASM
VEDAYyyar H  ( MI124557 )   H MIKAHAVA  ( N24578 )     RSM
VEDAYyyar H  ( MI124557  )   VNKAR IJ ( N245788)       NSM
我想把它格式化为

   ReportingTo       RSM         ASM     NSM
--------------------------------------------------------------------
所以这三行可以组成一行

任何帮助都将不胜感激

您可以使用pivot

select * from yourtable
pivot (max(Manager) for UserType in ([ASM],[RSM],[NSM])) p
如果您有更多的列并且在UserType中查找动态列,那么您可以使用动态查询,如下所示

declare @cols varchar(max)
declare @query nvarchar(max)

select @cols = stuff((select ','+QuoteName(UserType) from #yourtable group by UserType for xml path('')),1,1,'')

SET @query = 'select [Reporting To], ' + @cols + ' from ( ' + ' select [Reporting To], [Manager], [UserType] from Yourtable ) a ' 
SET @Query = @query + ' pivot (max(Manager) for UserType in (' + @cols + ')) p '

exec sp_executesql @query
输出如下:

+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
|         Reporting To          |              ASM               |                NSM                 |               RSM                |
+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
| VEDAMURTHY H C ( HI00007989 ) | P M ASHOK KUMAR ( HI00004297 ) | VIJAY SHANKAR IYER J ( HI00006779) | H S KESHAVA KUMAR ( HI00004056 ) |
+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
你可以使用pivot

select * from yourtable
pivot (max(Manager) for UserType in ([ASM],[RSM],[NSM])) p
如果您有更多的列并且在UserType中查找动态列,那么您可以使用动态查询,如下所示

declare @cols varchar(max)
declare @query nvarchar(max)

select @cols = stuff((select ','+QuoteName(UserType) from #yourtable group by UserType for xml path('')),1,1,'')

SET @query = 'select [Reporting To], ' + @cols + ' from ( ' + ' select [Reporting To], [Manager], [UserType] from Yourtable ) a ' 
SET @Query = @query + ' pivot (max(Manager) for UserType in (' + @cols + ')) p '

exec sp_executesql @query
输出如下:

+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
|         Reporting To          |              ASM               |                NSM                 |               RSM                |
+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
| VEDAMURTHY H C ( HI00007989 ) | P M ASHOK KUMAR ( HI00004297 ) | VIJAY SHANKAR IYER J ( HI00006779) | H S KESHAVA KUMAR ( HI00004056 ) |
+-------------------------------+--------------------------------+------------------------------------+----------------------------------+
使用数据透视表:

CREATE TABLE [dbo].[Table1]
 (
   [ReportingTo] [nvarchar](50) NULL,
   [Manager] [nvarchar](50) NULL,
   [UserType] [nvarchar](30) NULL
 ) 

 INSERT INTO Table1 (ReportingTo,Manager,UserType)
 SELECT 'VEDAMURTHY H C ( HI00007989 )','P M ASHOK KUMAR ( HI00004297 
        )','ASM' UNION ALL
 SELECT 'VEDAMURTHY H C ( HI00007989 )','H S KESHAVA KUMAR ( HI00004056 
        )','RSM' UNION ALL
 SELECT 'VEDAMURTHY H C ( HI00007989 )','VIJAY SHANKAR IYER J ( 
        HI00006779)','NSM' 


 SELECT *
 FROM 
 (
    SELECT * 
    FROM Table1
 ) A 
 PIVOT
 (
    MAX(Manager) FOR UserType IN ([ASM],[RSM],[NSM])
 )pvt
使用数据透视表:

CREATE TABLE [dbo].[Table1]
 (
   [ReportingTo] [nvarchar](50) NULL,
   [Manager] [nvarchar](50) NULL,
   [UserType] [nvarchar](30) NULL
 ) 

 INSERT INTO Table1 (ReportingTo,Manager,UserType)
 SELECT 'VEDAMURTHY H C ( HI00007989 )','P M ASHOK KUMAR ( HI00004297 
        )','ASM' UNION ALL
 SELECT 'VEDAMURTHY H C ( HI00007989 )','H S KESHAVA KUMAR ( HI00004056 
        )','RSM' UNION ALL
 SELECT 'VEDAMURTHY H C ( HI00007989 )','VIJAY SHANKAR IYER J ( 
        HI00006779)','NSM' 


 SELECT *
 FROM 
 (
    SELECT * 
    FROM Table1
 ) A 
 PIVOT
 (
    MAX(Manager) FOR UserType IN ([ASM],[RSM],[NSM])
 )pvt
输出

  ReportingTo                   ASM                      NSM                    RSM
-------------------------------------------------------------------------------------------------
VEDAYyyar H ( MI124557 )    P  KUMAR ( N156787 )     VNKAR IJ ( N245788)    H MIKAHAVA  ( N24578 )
输出

  ReportingTo                   ASM                      NSM                    RSM
-------------------------------------------------------------------------------------------------
VEDAYyyar H ( MI124557 )    P  KUMAR ( N156787 )     VNKAR IJ ( N245788)    H MIKAHAVA  ( N24578 )

你需要逗号分隔吗?@KannanKandasamy不,他需要一行所有数据..:)@BinoyKumar Yes可能的重复你需要逗号分隔吗?@KannanKandasamy不,他需要一行所有数据..:)@BinoyKumar Yes可能的重复