在JOIN查询中使用GROUP BY SQL函数

时间:2017-01-10 12:04:38

标签: sql sql-server group-by inner-join

我有这个查询工作得很好:

SELECT [Exam Category]
      ,[Student No_]
      ,Gender
      ,Description
      ,Stage 
FROM [MYDB $Course Registration]
    inner join [MYDB $Student] 
        ON [Student No_] = No_
    inner join [MYDB $Programme]
        ON Code = Programme
where Gender != 0
order by [Exam Category] desc
        ,[Student No_]
        ,Stage

但是,我想按[Exam Category]分组:

SELECT [Exam Category]
      ,[Student No_]
      ,Gender
      ,Description
      ,Stage 
FROM [MYDB $Course Registration]
    inner join [MYDB $Customer] 
        ON [Student No_] = No_
    inner join [MYDB $Programme]
        ON Code = Programme
where Gender != 0
group by [Exam Category]
order by  Stage
         ,[Student No_]

但它会带来错误

  

Msg 8120,Level 16,State 1,Line 9   专栏#MYDB $课程注册。学生没有_'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

任何帮助?

2 个答案:

答案 0 :(得分:1)

注意 - 如果你通过选项给出group,那么*不能在select语句中 你必须在select语句中提到列名 select列应具有max,count,sum等聚合函数, 那些没有聚合函数名称的列应该在group by子句

之后指定那些列名

//在你的情况下,性别,描述,阶段不包括在分组中,

![SELECT [Exam Category]
  ,[Student No_]
  ,Gender
  ,Description
  ,Stage FROM [MYDB $Course Registration]
inner join [MYDB $Customer] 
    ON [Student No_] = No_
inner join [MYDB $Programme]
    ON Code = Programme where Gender != 0 group by [Exam Category]

我的代码参考检查

select MAX(Employee_Details.NewEmployeeId)
    ,Employee_Details.First_Name
from Employee_Details
INNER JOIN EmployeeDesignation_List ON Employee_Details.Designation=EmployeeDesignation_List.Designation_id
WHERE Employee_Details.Status='Active'
GROUP BY Employee_Details.First_Name
ORDER BY Employee_Details.First_Name

答案 1 :(得分:0)

如果你想按Exam Category聚合,那么我希望这样的查询:

SELECT [Exam Category], COUNT(*)
FROM [MYDB $Course Registration] inner join
     [MYDB $Customer]
    ON [Student No_] = No_ inner join
    [MYDB $Programme]
    ON Code = Programme
where Gender <> 0
Group by [Exam Category];

请注意,所有其他列都已从SELECT中删除。

如果这不是您想要的,那么您应该编辑您的问题并提供样本数据和所需的结果。