我有这个SQL查询,并且我尝试过多种方式进行分组,但它对我不起作用,我希望按 noExp
select Alumnos.nombreComp as Nombre,
Carreras.nombre as Carrera,
Alumnos.noExp as Expediente,
Historial.fecha as Fecha,
Historial.equipo as Equipo
from Alumnos, Historial, Carreras
where YEAR(fecha)= @año
and MONTH (fecha)=@Mes
and Historial.noExp = Alumnos.noExp
and Alumnos.carrera = Carreras.id_carrera
and Alumnos.activo = 1
帮助!
答案 0 :(得分:2)
INNER JOIN
来获取表格和OUTER JOIN
之间的匹配,以便在匹配时获得匹配但即使一方没有匹配也仍然可以获取记录具有正确连接语法的SQL代码
SELECT Alumnos.nombreComp as Nombre
, Carreras.nombre as Carrera
, Alumnos.noExp as Expediente
, Historial.fecha as Fecha
, Historial.equipo as Equipo
FROM Alumnos INNER JOIN Historial ON Historial.noExp = Alumnos.noExp
INNER JOIN Carreras ON Alumnos.carrera = Carreras.id_carrera
WHERE YEAR(fecha)= @año
AND MONTH (fecha)=@Mes
AND Alumnos.activo = 1
答案 1 :(得分:0)
因此,对于SQL Server,您必须按查询的select子句中提到的每个列进行分组。 SQL Server需要知道如何组织所有列。如果您希望按noExp进行分组,然后将其列为第一个分组选项,然后按照您的数据需要显示的顺序列出组中的后续列,将获得主要按noExp分组的列表。
select
Alumnos.nombreComp as Nombre,
Carreras.nombre as Carrera,
Alumnos.noExp as Expediente,
Historial.fecha as Fecha, Historial.equipo as Equipo
from Alumnos, Historial, Carreras
where YEAR(fecha)= @año
and MONTH (fecha)=@Mes
and Historial.noExp = Alumnos.noExp
and Alumnos.carrera = Carreras.id_carrera
and Alumnos.activo = 1
GROUP BY Alumnos.noExp, Alumnos.nombrecomp,Carreras.nombre,Historial.fecha
答案 2 :(得分:0)
如果您只想使用一个字段进行分组,而不是使用MAX关键字,请按以下方式编写查询。
select MAX(Alumnos.nombreComp) as Nombre,
MAX(Carreras.nombre) as Carrera,
Alumnos.noExp as Expediente,
Max(Historial.fecha) as Fecha,
Max(Historial.equipo) as Equipo
from Alumnos, Historial, Carreras
where YEAR(fecha)= @año and MONTH (fecha)=@Mes
and Historial.noExp = Alumnos.noExp
and Alumnos.carrera = Carreras.id_carrera
and Alumnos.activo = 1
GROUP By Alumnos.noExp
答案 3 :(得分:0)
对于使用group by子句,你应该在查询中使用一些聚合函数,比如avg()。在你要使用group by子句的字段上使用聚合函数。