读书人

[30分]基础有关问题待;环境创建的代

发布时间: 2012-02-29 16:44:11 作者: rapoo

[30分]求助基础问题,在线等待;环境创建的代码和测试数据已经给出
现有2基础数据表,数据如下

TBL1 数据

school class1 class2 class3
-------- ----------- ----------- -----------
内 11.00 11.00 11.00
内 12.00 12.00 12.00
外 13.00 13.00 13.00
外 14.00 14.00 14.00

TBL2 数据

school hope1 hope2 hope3
------- ----------- ----------- -----------
内 110.00 110.00 110.00
内 120.00 120.00 120.00
外 130.00 130.00 130.00
外 140.00 140.00 140.00

期望结果:
school class1SUM class2SUM class3SUM hope1SUM hope2SUM2 hope3SUM
------ -------- -------- --------- -------- -------- --------
内 23.00 23.00 23.00 230.00 230.00 230.00
外 27.00 27.00 27.00 270.00 270.00 270.00

请问:
SELECT tbl1.school ,sum(class1) as class1 ,sum(class2) as class2 ,sum(class3) as class3 ,
sum(hope1) as hope1 ,sum(hope2) as hope2 ,sum(hope3) as hope3
from tbl1 left join tbl2 on tbl1.school = tbl2.school
group by tbl1.school



school class1SUM class2SUM class3SUM hope1SUM hope2SUM2 hope3SUM
------ -------- -------- --------- -------- -------- --------
内 46.00 46.00 46.00 460.00 460.00 460.00
外 54.00 54.00 54.00 540.00 540.00 540.00

为什么达不到期望结果,且和期望数据有出入?请给出原理解释和实现方法;谢谢



[解决办法]
SELECT tbl1.school ,sum(class1) as class1 ,sum(class2) as class2 ,sum(class3) as class3 ,
sum(hope1) as hope1 ,sum(hope2) as hope2 ,sum(hope3) as hope3
from tbl1 inner join tbl2 on tbl1.school = tbl2.school
group by tbl1.school
[解决办法]
关注!
[解决办法]
去掉group by

SELECT tbl1.school ,sum(class1) as class1 ,sum(class2) as class2 ,sum(class3) as class3 ,
sum(hope1) as hope1 ,sum(hope2) as hope2 ,sum(hope3) as hope3
from tbl1 left join tbl2 on tbl1.school = tbl2.school

看一下结果就会明白了。

[解决办法]
create table tbl1
(school varchar(10),class1 int,class2 int,class3 int)
insert into tbl1 select '内 ',11,11,11
union all select '内 ',12,12,12
union all select '外 ',13,13,13
union all select '外 ',14,14,14


create table tbl2
(school varchar(10),hope1 int,hope2 int,hope3 int)
insert into tbl2 select '内 ',110,110,110
union all select '内 ',120,120,120
union all select '外 ',130,130,130
union all select '外 ',140,140,140

go

select ta.school,[class1SUM],[class2SUM],[class3SUM],[hope1SUM],[hope2SUM],[hope3SUM]
from
(select school,[class1SUM]=sum(class1),[class2SUM]=sum(class2),[class3SUM]=sum(class3) from tbl1 group by school)ta
left join
(select school,[hope1SUM]=sum(hope1),[hope2SUM]=sum(hope2),[hope3SUM]=sum(hope3)from tbl2 group by school)tb
on ta.school=tb.school

school class1SUM class2SUM class3SUM hope1SUM hope2SUM hope3SUM
---------- ----------- ----------- ----------- ----------- ----------- -----------
内 23 23 23 230 230 230
外 27 27 27 270 270 270

(所影响的行数为 2 行)

读书人网 >SQL Server

热点推荐