Dado que el autor no tuvo la amabilidad de dar el SQL para crear el esquema, aquí está para cualquiera que quiera probar la solución de @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');
Aquí es una solución alternativa usando case
con group by
.
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
;
Para la comparación, aquí es la misma instrucción de selección de @ solución de Eric:
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
;
Será interesante ver cuál sería un mejor desempeño cuando hay una gran cantidad de datos.
gracias Eric ... la querry funciona bien para conseguir la totalidad de los detalles acerca de un student.but Quiero modificar el contenido y columnas en una table.I Creo que no recibió mi pregunta. Quiero cambiar la mesa. – arams
Gracias ERIC ... Funciona bien. – arams
@arams: ¡Fantástico, me alegro de escucharlo! Vota por favor/marca esto como la respuesta si resolvió tu problema. – Eric