2016-09-28 85 views
-1

我有这样的SQL查询,我试图通过多种方式来组织,但它并没有为我工作,我想按noExp我如何分组这个SQL查询?

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)[email protected] 
    and Historial.noExp = Alumnos.noExp 
    and Alumnos.carrera = Carreras.id_carrera 
    and Alumnos.activo = 1 

帮助!

+0

'我想通过noExp'进行分组,您好,您想对其他列做什么? – Lamak

+0

显示相应的值 –

+0

但是,您正在对一列进行分组,其余的“相应”值是什么?最小?最大?什么? – Lamak

回答

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)[email protected] 
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
  1. 你真的应该使用正确的联接语法INNER JOIN为表和OUTER JOIN之间获得比赛拿到那里有一个匹配的比赛,但仍然得到记录,即使没有从一个侧面匹配。
  2. 要使用GROUP BY,您需要Aggregate Function,目前您没有任何关于您想要在数据中看到什么类型的聚合的提示,因此添加一个聚合是没有意义的。如果你想通过组只有一个字段不是使用MAX关键字如下编写查询

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)[email protected] 
    AND Alumnos.activo = 1 
0

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)[email protected] 
and Historial.noExp = Alumnos.noExp 
and Alumnos.carrera = Carreras.id_carrera 
and Alumnos.activo = 1 
GROUP By Alumnos.noExp 
0

使用GROUP BY子句,你应该在一个像平均查询的一些聚合函数()。使用现场为您希望通过子句中使用组的聚合功能。