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