在 SQL 服务器中使用 Pivot 收缩和分组列
Shrink and Group Column using Pivot in SQL Server
我有 SQL Table:
DECLARE @team TABLE (Department VARCHAR(20),TeamMember1 VARCHAR(50),TeamMember2 VARCHAR(50),TeamMember3 VARCHAR(50))
INSERT INTO @team VALUES('CRM','Tom', 'Harry', 'Rodger')
INSERT INTO @team VALUES('ERP','Boby', 'Simha', 'Wonder')
INSERT INTO @team VALUES('HR','Jack', 'John', 'Jim')
SELECT t.* FROM @team t
Table 的输出应该是
我的预期输出应该是
我参考了很多教程,但找不到解决方案。所以,请帮助我...这是临时的 table,我需要在我的主项目中实现相同的逻辑。
首先,您应该知道将团队成员存储在单独的列中是一种糟糕的数据格式。你想要的结果是更好的格式。
如果您正在学习 SQL,一个简单的解决方案是 UNION ALL
:
select Department, TeamMember1 as TeamMember from @team union all
select Department, TeamMember2 as TeamMember from @team union all
select Department, TeamMember3 as TeamMember from @team;
但是,在某些情况下,其他方法更有效。我会倾向于使用:
select t.Department, v.TeamMember
from @team t outer apply
(values (TeamMember1), (TeamMember2), (TeamMember3)) v(TeamMember);
SELECT t.*
FROM @team
CROSS APPLY (
VALUES ('TeamMember1', TeamMember1)
, ('TeamMember2', TeamMember2)
, ('TeamMember3', TeamMember3)
) t(TeamName, TeamMember)
我有 SQL Table:
DECLARE @team TABLE (Department VARCHAR(20),TeamMember1 VARCHAR(50),TeamMember2 VARCHAR(50),TeamMember3 VARCHAR(50))
INSERT INTO @team VALUES('CRM','Tom', 'Harry', 'Rodger')
INSERT INTO @team VALUES('ERP','Boby', 'Simha', 'Wonder')
INSERT INTO @team VALUES('HR','Jack', 'John', 'Jim')
SELECT t.* FROM @team t
Table 的输出应该是
我的预期输出应该是
我参考了很多教程,但找不到解决方案。所以,请帮助我...这是临时的 table,我需要在我的主项目中实现相同的逻辑。
首先,您应该知道将团队成员存储在单独的列中是一种糟糕的数据格式。你想要的结果是更好的格式。
如果您正在学习 SQL,一个简单的解决方案是 UNION ALL
:
select Department, TeamMember1 as TeamMember from @team union all
select Department, TeamMember2 as TeamMember from @team union all
select Department, TeamMember3 as TeamMember from @team;
但是,在某些情况下,其他方法更有效。我会倾向于使用:
select t.Department, v.TeamMember
from @team t outer apply
(values (TeamMember1), (TeamMember2), (TeamMember3)) v(TeamMember);
SELECT t.*
FROM @team
CROSS APPLY (
VALUES ('TeamMember1', TeamMember1)
, ('TeamMember2', TeamMember2)
, ('TeamMember3', TeamMember3)
) t(TeamName, TeamMember)