[求助]sql语句求和统计

snower01 2007-06-24 04:47:13
在数据库中字段如下,调试环境asp+access:
id t_name 时间 数值1 数值2 合计
1 a 2007-6 5 4 9
2 a 2007-5 3 7 10
3 b 2007-6 6 6 12
4 b 2007-5 7 7 14

怎样通过一句sql,将数据显示为
姓名 5月 6月 合计
a 10 9 19
b 14 12 26

sql是:
SELECT * FROM B1 LEFT JOIN (
select t_name,sum(iif(时间='2007-5',合计,0)) as 5月,
sum(iif(时间='2007-6',合计,0)) as 6月,sum(合计) as hj
from tt group by T_name) A
ON A.T_NAME=B1.T_NAME

现在的问题是数据显示为
姓名 5月 6月 合计
a 10 9 19
b 14 12 26
a 10 9 19
b 14 12 26
多循环了一次,sql 语句怎样修改。谢谢。
...全文
387 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
snower01 2007-06-24
  • 打赏
  • 举报
回复
高手,平均值问题已经解决。如果有10条记录,怎样显示如下:
姓名 5月 6月 合计 平均值 排序
---------- ----------- ----------- ----------- ------------ ------
a 10 9 19 9.500000 2
b 14 12 26 13.000000 1
……
dawugui 2007-06-24
  • 打赏
  • 举报
回复
if object_id('pubs..tb') is not null
drop table tb
go

create table tb(id int,t_name varchar(10), 时间 varchar(10),数值1 int,数值2 int,合计 int)
insert into tb values(1, 'a', '2007-6', 5, 4, 9)
insert into tb values(2, 'a', '2007-5', 3, 7, 10)
insert into tb values(3, 'b', '2007-6', 6, 6, 12)
insert into tb values(4, 'b', '2007-5', 7, 7, 14)
go

select t_name 姓名,
sum(case 时间 when '2007-5' then 合计 end) '5月',
sum(case 时间 when '2007-6' then 合计 end) '6月',
sum(合计) 合计,
avg(合计*1.0) 平均值
from tb
group by t_name

drop table tb

姓名 5月 6月 合计 平均值
---------- ----------- ----------- ----------- ------------
a 10 9 19 9.500000
b 14 12 26 13.000000
snower01 2007-06-24
  • 打赏
  • 举报
回复
姓名 5月 6月 合计 平均值 排序
---------- ----------- ----------- ----------- ------- -----
a 10 9 19 ? 2
b 14 12 26 ? 1
再次感谢
昵称被占用了 2007-06-24
  • 打赏
  • 举报
回复
Try:

select t_name,sum(iif(时间='2007-5',合计,0)) as 5月,
sum(iif(时间='2007-6',合计,0)) as 6月,sum(合计) as hj
from tt group by T_name
order by avg(合计) desc
snower01 2007-06-24
  • 打赏
  • 举报
回复
按照Haiwer(海阔天空) 的方法
select t_name,sum(iif(时间='2007-5',合计,0)) as 5月,
sum(iif(时间='2007-6',合计,0)) as 6月,sum(合计) as hj
from tt group by T_name
结果正确,
姓名 5月 6月 合计
---------- ----------- ----------- -----------
a 10 9 19
b 14 12 26
如果合计按月的个数平均再按照平均值排序呢?
dawugui 2007-06-24
  • 打赏
  • 举报
回复
给出你的结果来
snower01 2007-06-24
  • 打赏
  • 举报
回复
如果合计按月平均再按照合计排序呢?
dawugui 2007-06-24
  • 打赏
  • 举报
回复
if object_id('pubs..tb') is not null
drop table tb
go

create table tb(id int,t_name varchar(10), 时间 varchar(10),数值1 int,数值2 int,合计 int)
insert into tb values(1, 'a', '2007-6', 5, 4, 9)
insert into tb values(2, 'a', '2007-5', 3, 7, 10)
insert into tb values(3, 'b', '2007-6', 6, 6, 12)
insert into tb values(4, 'b', '2007-5', 7, 7, 14)
go

select t_name 姓名,
sum(case 时间 when '2007-5' then 合计 end) '5月',
sum(case 时间 when '2007-6' then 合计 end) '6月',
sum(合计) 合计
from tb
group by t_name

drop table tb

/*
姓名 5月 6月 合计
---------- ----------- ----------- -----------
a 10 9 19
b 14 12 26

(所影响的行数为 2 行)
*/
昵称被占用了 2007-06-24
  • 打赏
  • 举报
回复
不可能结果是
姓名 5月 6月 合计
a 10 9 19
b 14 12 26
a 10 9 19
b 14 12 26

字段个数就不对

chuifengde 2007-06-24
  • 打赏
  • 举报
回复
加个distinct不就行了?
昵称被占用了 2007-06-24
  • 打赏
  • 举报
回复
不知道你的B表是干什么的

昵称被占用了 2007-06-24
  • 打赏
  • 举报
回复
直接要

select t_name,sum(iif(时间='2007-5',合计,0)) as 5月,
sum(iif(时间='2007-6',合计,0)) as 6月,sum(合计) as hj
from tt group by T_name

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧