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 --为什么这个就不真确呢? 错误提示和上面的一样的.
from table2 left join table1 on
table2.dep = table1.dep group by table2.name
select max(table2.name)
from table2 left join table1 on
table2.dep = table1.dep group by table2.dep
你用什么来分组?
你要分组统计什么?在你的查询中,并没有统计,因此,不知道你用 group 干嘛.
因为你group by的是table2.dep呀
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条数据选择那一条?
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
*/
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......