작성자가 SQL을 사용하여 스키마를 작성하기에 충분하지 않으므로 @Eric의 솔루션을 사용하고자하는 모든이를위한 것입니다.
create table markdetails (studid, subjectid, marks);
create table student_info (studid, name);
insert into markdetails values('A1', 3, 50);
insert into markdetails values('A1', 4, 60);
insert into markdetails values('A1', 5, 70);
insert into markdetails values('B1', 3, 60);
insert into markdetails values('B1', 4, 80);
insert into markdetails values('C1', 5, 95);
insert into student_info values('A1', 'Raam');
insert into student_info values('B1', 'Vivek');
insert into student_info values('C1', 'Alex');
여기 group by
으로 case
를 이용한 다른 해결책이다.
select
u.stuid,
u.name,
s3.marks as subjectid_3,
s4.marks as subjectid_4,
s5.marks as subjectid_5
from
student_temp u
left outer join markdetails s3 on
u.stuid = s3.stuid
and s3.subjectid = 3
left outer join markdetails s4 on
u.stuid = s4.stuid
and s4.subjectid = 4
left outer join markdetails s5 on
u.stuid = s5.stuid
and s5.subjectid = 5
;
많은 양의 데이터가있을 때 하나가 더 나은 실적을 것이다 볼 흥미로운 일이 될 것이다 :
select
si.studid,
si.name,
sum(case when md.subjectid = 3 then md.marks end) subjectid_3,
sum(case when md.subjectid = 4 then md.marks end) subjectid_4,
sum(case when md.subjectid = 5 then md.marks end) subjectid_5
from student_info si
join markdetails md on
md.studid = si.studid
group by si.studid, si.name
;
비교를 위해, 여기에 에릭의 솔루션 @에서 같은 select 문이다.
덕분에 나는 테이블에 배치의 콘텐츠 및 열을 수정할 내 질문을 못 생각했다고 생각해. 나는 테이블을 바꾸고 싶다. – arams
에릭 감사 ... 그것은 잘 동작합니다. – arams
@arams : 환상적이며 듣기 좋습니다! 제발 당신의 문제가 해결되면 upvote/답변으로 표시! – Eric