create table table1
(
mon char(3),
dep char(2),
yj int
)
alter table table1
alter column mon nchar(3)
insert into table1 values('一月份', '01', 10)
insert into table1 values('一月份', '02', 10)
insert into table1 values('一月份', '03', 5)
insert into table1 values('二月份', '02', 8)
insert into table1 values('二月份', '04', 9)
insert into table1 values('三月份', '03', 8)
select * from table1
delete  from table1create table table2
(
dep char(2),
name nchar(6)
)
insert into table2 values('01', '国内业务一部')
insert into table2 values('02', '国内业务二部')
insert into table2 values('03', '国内业务三部')
insert into table2 values('04', '国内业务四部')--当我执行下面的语句的时候就错误了.  
-- 错误: 选择列表中的列 'table2.name' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
 
select *
from table2 left join table1 on
table2.dep = table1.dep group by table2.dep--大家说说为什么啊.  
select table2.dep
from table2 left join table1 on
table2.dep = table1.dep group by table2.dep  --为什么这个就正确呢?
select table2.name
from table2 left join table1 on
table2.dep = table1.dep group by table2.dep  --为什么这个就不真确呢?  错误提示和上面的一样的.

解决方案 »

  1.   

    select table2.name
    from table2 left join table1 on
    table2.dep = table1.dep group by table2.name 
      

  2.   

    group by 后面的字段要和前面的一样,否则就需要在前面的字段上加上聚合函数例如:
    select max(table2.name)
    from table2 left join table1 on
    table2.dep = table1.dep group by table2.dep
      

  3.   

    聚合函数使用时要注意分清:
    你用什么来分组?
    你要分组统计什么?在你的查询中,并没有统计,因此,不知道你用 group 干嘛.
      

  4.   

    ...这个怎么说呢
    因为你group by的是table2.dep呀
      

  5.   

    有group by,说明你就要执行聚合,而group by后面的字段作为分组的依据。
    SELECT MON,MAX(dep),MAX(yj) FROM table1 GROUP BY mon
    --执行完GROUP BY的结果是
    /*
    一月份 01 10
          02 10
          03 5
    二月份 02 8
          04 9
    三月份 03 8
    */
    --如果不聚合的话,一月份3条数据选择那一条?
      

  6.   

    聚合的每一列均需在group by 语句中声明group by table2.name,table2.dep
      

  7.   

    说得很到位哦.select 
    table2.dep 部门, table2.name,
    sum (case when mon='一月份' then yj else 0 end) as 一月份,
    sum (case when mon='二月份' then yj else 0 end) as 二月份,
    sum (case when mon='三月份' then yj else 0 end) as 三月份
    from table2 left join table1 on
    table2.dep = table1.dep group by table2.dep, table2.name/*
    部门 name 一月份 二月份 三月份
    02 国内业务二部 10 8 0
    03 国内业务三部 5 0 8
    04 国内业务四部 0 9 0
    01 国内业务一部 20 0 0
    */
      

  8.   

    --如果要以月份来分组,统计每月yj的总和:
    select mon,sum(yj) from table1 group by mon--如果要以月份和部门分组,统计每月每部门yj的总和:
    select a.mon,b.name,sum(a.yj) 
    from table1 a inner join table2 b on a.dep=b.dep 
    group by a.mon,b.name--求和用 sum,求最大值用 max,求项目数用 count......