在单个结果中加入一对多字段,无需串联

Hel*_*rld 0 sql-server query pivot

我遇到了与在单个结果连接一对多字段相同的问题,但我需要一个结果,其中“许多”字段占据自己的列并且没有连接在一列中。有什么建议?

样本数据:

___ID      Mapped_Heading    Source_Value
1          English           pass
1          Math              pass
1          History           fail


___ID      Name              Age
1          Bob               12
2          Harry             12
3          Emily             14
Run Code Online (Sandbox Code Playgroud)

最终结果将是:

___ID      Name      Age  English   Math   History
1          Bob       12   pass      pass   fail
Run Code Online (Sandbox Code Playgroud)

我希望我也不会用PIVOTPARTITION BY,因为我不熟悉这些功能,但我一直撞到他们对于这个问题这么认为,我可能有什么打算?

Ken*_*her 5

一种方法是使用PIVOT.

这是设置代码:

create table grades (
  ID             int,
  Mapped_Heading varchar(10),
  Source_Value   varchar(10)
);
create table students (
  ID   int,
  Name varchar(10),
  Age  int
);
insert grades 
values
(1,'English', 'pass'),
(1,'Math',    'pass'),
(1,'History', 'fail');
insert students
values
(1, 'Bob',   12),
(2, 'Harry', 12),
(3, 'Emily', 14);
Run Code Online (Sandbox Code Playgroud)

这是PIVOT代码:

with temp as (
  select s.*, g.Mapped_Heading, g.Source_Value
  from students s
  join grades g on g.ID = s.ID
)
select * 
from (
    select * 
    from temp
) a
pivot (
    max(Source_Value)
    for Mapped_Heading in ([English],[Math],[History])
) as b
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

+----+------+-----+---------+------+---------+
| ID | Name | Age | English | Math | History |
+----+------+-----+---------+------+---------+
| 1  | Bob  | 12  | pass    | pass | fail    |
+----+------+-----+---------+------+---------+
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示