有一个factory的数据库,新建三张表worker,depart,salary,包含以下字段
woker(职工号、姓名、性别、出生日期、党员否、参加工作、部门号)
depart(部门号、部门名)
salary(职工号、姓名、日期、工资)目的是在查询分析器编写代码,显示所有职工的职工号、姓名、部门名和2004.2月份工资,并按照部门名顺序排列我的代码如下:
use factory
select x.职工号, x.姓名, z.工资 as '二月份工资'
from worker x,depart y,salary z
where year(z.日期)=2004 and month(z.日期)=2  and x.部门号=y.部门号 and x.职工号=z.职工号
group by y.部门名出现的错误是:
服务器: 消息 8120,级别 16,状态 1,行 2
列 'x.职工号' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
服务器: 消息 8120,级别 16,状态 1,行 2
列 'x.姓名' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
服务器: 消息 8120,级别 16,状态 1,行 2
列 'z.工资' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。肯定是不止这些错误,稍加改动就有别的错误,但是,还有,发现每次在查询列的时候,如果没有在group by 出现或者在where语句出现,就会出现类似错误,不知道如何跟正

解决方案 »

  1.   

    use factory 
    select x.职工号, x.姓名, z.工资 as '二月份工资' 
    from worker x,depart y,salary z 
    where year(z.日期)=2004 and month(z.日期)=2  and x.部门号=y.部门号 and x.职工号=z.职工号 
    order by y.部门名
      

  2.   

    use factory 
    select x.职工号, x.姓名, z.工资 as '二月份工资' 
    from worker x,depart y,salary z 
    where year(z.日期)=2004 and month(z.日期)=2  and x.部门号=y.部门号 and x.职工号=z.职工号 
    order by y.部门名 
      

  3.   

    排序关键字是order by ,group by 是聚合分组用的.
      

  4.   


    select x.职工号,x.姓名,y.部门名,z.工资 as '二月份工资'   
    from worker x inner join depart y on x.部门号=y.部门号
       inner join salary z on x.职工号=z.职工号
    where datediff(month,'2004-02-01',z.日期)=0
    order by 部门名[/code]
      

  5.   


    select x.职工号,x.姓名,y.部门名,z.工资 as '二月份工资'  
    from worker x inner join depart y on x.部门号=y.部门号 
      inner join salary z on x.职工号=z.职工号 
    where datediff(month,'2004-02-01',z.日期)=0 
    order by 部门名