SQL条件分类汇总
系统环境:windowsxp,office2003,foxpro6.0有一社区信息管理文件,位置:e:\社区管理\社区.xls,表内容如下:户号姓名身份收入社区001na...
系统环境:windows xp,office 2003,foxpro6.0
有一社区信息管理文件,位置:e:\社区管理\社区.xls,表内容如下:
户号 姓名 身份 收入 社区
001 name1 户主 800.00 社区a
001 name2 成员1 700.00 社区a
001 name3 成员2 700.00 社区a
003 name7 成员1 500.00 社区a
003 name8 户主 850.00 社区a
003 name9 成员2 700.00 社区b
003 name10 成员3 780.00 社区c
101 name11 户主 850.00 社区b
101 name12 成员1 700.00 社区b
103 name17 成员3 780.00 社区a
103 name18 户主 850.00 社区b
103 name19 成员1 700.00 社区b
201 name20 成员3 780.00 社区c
201 name21 户主 850.00 社区c
201 name22 成员1 700.00 社区c
202 name23 户主 850.00 社区c
202 name24 成员1 700.00 社区a
202 name25 成员3 780.00 社区b
需要解决的问题:
1.按社区统计每个家庭的总收入,即以户号为主要字段分类汇总,同一户号为一个家庭;
2.同一户号下有不同社区的家庭成员时,以户主所在的社区为准,同时修改其他家庭成员所在的社区与户主相同;
3.以户号分汇总家庭总收入时要求必须显示户主所在的行,即姓名字段必须显示户主姓名,并统计家庭成员数量,增加"count(*) as 人数"字段。统计结果按收入高低排序;
4.在"e:\社区管理\"文件夹下生成两个新的文件,"家庭收入.xls"文件存放各家庭收入,在同一excel文件下以不同的工作表存放不同社区的各家庭收入。"社区new.xls"文件与原社区.xls文件基本一致,仅对"社区"字段以户主所在社区为准,对其他家庭成员社区属性进行修改后导出"社区new.xls"文件。
5.由于本人刚接触SQL和VFP,对好多语法和命令很不熟悉,请高手帮助编写一个"社区管理.prg"程序,双击后在vf环境下运行,并生成所需的两个文件。另外,请对有些比较复杂的语句或命令用&&做一注释,以便于学习,不胜感激。
本人的基本思路:
1.通过vfp6.0导入社区.xls文件为社区.dbf,去掉第一行标题行。
2.通过SQL的sele...from...where...gourp by...语句或vfp的命令对"社区.dbf"文件进行分类汇总和对"社区"字段进行修改操作。(重点内容)
3.用copy to或其他命令输出两个所需文件,即"家庭收入.xls"和"社区new.xls"文件。
再次感谢各位高手帮忙,谢谢! 展开
有一社区信息管理文件,位置:e:\社区管理\社区.xls,表内容如下:
户号 姓名 身份 收入 社区
001 name1 户主 800.00 社区a
001 name2 成员1 700.00 社区a
001 name3 成员2 700.00 社区a
003 name7 成员1 500.00 社区a
003 name8 户主 850.00 社区a
003 name9 成员2 700.00 社区b
003 name10 成员3 780.00 社区c
101 name11 户主 850.00 社区b
101 name12 成员1 700.00 社区b
103 name17 成员3 780.00 社区a
103 name18 户主 850.00 社区b
103 name19 成员1 700.00 社区b
201 name20 成员3 780.00 社区c
201 name21 户主 850.00 社区c
201 name22 成员1 700.00 社区c
202 name23 户主 850.00 社区c
202 name24 成员1 700.00 社区a
202 name25 成员3 780.00 社区b
需要解决的问题:
1.按社区统计每个家庭的总收入,即以户号为主要字段分类汇总,同一户号为一个家庭;
2.同一户号下有不同社区的家庭成员时,以户主所在的社区为准,同时修改其他家庭成员所在的社区与户主相同;
3.以户号分汇总家庭总收入时要求必须显示户主所在的行,即姓名字段必须显示户主姓名,并统计家庭成员数量,增加"count(*) as 人数"字段。统计结果按收入高低排序;
4.在"e:\社区管理\"文件夹下生成两个新的文件,"家庭收入.xls"文件存放各家庭收入,在同一excel文件下以不同的工作表存放不同社区的各家庭收入。"社区new.xls"文件与原社区.xls文件基本一致,仅对"社区"字段以户主所在社区为准,对其他家庭成员社区属性进行修改后导出"社区new.xls"文件。
5.由于本人刚接触SQL和VFP,对好多语法和命令很不熟悉,请高手帮助编写一个"社区管理.prg"程序,双击后在vf环境下运行,并生成所需的两个文件。另外,请对有些比较复杂的语句或命令用&&做一注释,以便于学习,不胜感激。
本人的基本思路:
1.通过vfp6.0导入社区.xls文件为社区.dbf,去掉第一行标题行。
2.通过SQL的sele...from...where...gourp by...语句或vfp的命令对"社区.dbf"文件进行分类汇总和对"社区"字段进行修改操作。(重点内容)
3.用copy to或其他命令输出两个所需文件,即"家庭收入.xls"和"社区new.xls"文件。
再次感谢各位高手帮忙,谢谢! 展开
2个回答
展开全部
只会点SQL 语句,写下来看看!代码如下:
1:
select 用户号,sum(收入) as 家庭收入,社区名 from shequbiao
group by 用户号,社区名
2:
先创建一个带参数的存储过程:
create procedure 存储过程名
@id char(4)
as
update shequbiao set 社区名=(select 社区名 from shequbiao where 用户类型='户主'and 用户号=@id )
where 用户号=@id
然后执行:
exec 存储过程名 参数
3:
select 用户号 , sum(收入) as 家庭总收入,count(*)as 家庭总人数 ,用户名=(select 用户名 from shequbiao aa where 用户类型='户主'and aa.用户号=bb.用户号)
from shequbiao bb
group by 用户号
order by sum(收入) desc
1:
select 用户号,sum(收入) as 家庭收入,社区名 from shequbiao
group by 用户号,社区名
2:
先创建一个带参数的存储过程:
create procedure 存储过程名
@id char(4)
as
update shequbiao set 社区名=(select 社区名 from shequbiao where 用户类型='户主'and 用户号=@id )
where 用户号=@id
然后执行:
exec 存储过程名 参数
3:
select 用户号 , sum(收入) as 家庭总收入,count(*)as 家庭总人数 ,用户名=(select 用户名 from shequbiao aa where 用户类型='户主'and aa.用户号=bb.用户号)
from shequbiao bb
group by 用户号
order by sum(收入) desc
展开全部
DECLARE @t TABLE(Groups char(2),Item varchar(10),Color varchar(10),Quantity int)
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90
--汇总显示
SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '总计'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 AND GROUPING(Groups)=0 THEN Groups+' 合计'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 AND GROUPING(Item)=0 THEN Item+' 小计'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
/*--结果
Groups Item Color Quantity
-------- ---------------- ---------------------- -----------
aa Chair Blue 101
aa Chair Red -90
Chair 小计 11
aa Table Blue 124
Table 小计 124
aa 合计 135
bb Cup Green -23
Cup 小计 -23
bb Table Red -23
Table 小计 -23
bb 合计 -46
总计 89
--*/
--------------------------
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([部门] varchar(6),[电话] varchar(20),[金额] int)
insert [tb]
select '营业部',8001,20 union all
select '营业部',8002,30 union all
select '财务部',6001,10 union all
select '财务部',6003,100
select
isnull(部门,'总计') as 部门,
isnull(电话,'小计') as 电话,
sum(金额) as 金额
from tb
group by 部门,电话 with rollup --测试结果:
/*
部门 电话 金额
------ -------------------- -----------
财务部 6001 10
财务部 6003 100
财务部 小计 110
营业部 8001 20
营业部 8002 30
营业部 小计 50
总计 小计 160
(所影响的行数为 7 行)
*/
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90
--汇总显示
SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '总计'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 AND GROUPING(Groups)=0 THEN Groups+' 合计'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 AND GROUPING(Item)=0 THEN Item+' 小计'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
/*--结果
Groups Item Color Quantity
-------- ---------------- ---------------------- -----------
aa Chair Blue 101
aa Chair Red -90
Chair 小计 11
aa Table Blue 124
Table 小计 124
aa 合计 135
bb Cup Green -23
Cup 小计 -23
bb Table Red -23
Table 小计 -23
bb 合计 -46
总计 89
--*/
--------------------------
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([部门] varchar(6),[电话] varchar(20),[金额] int)
insert [tb]
select '营业部',8001,20 union all
select '营业部',8002,30 union all
select '财务部',6001,10 union all
select '财务部',6003,100
select
isnull(部门,'总计') as 部门,
isnull(电话,'小计') as 电话,
sum(金额) as 金额
from tb
group by 部门,电话 with rollup --测试结果:
/*
部门 电话 金额
------ -------------------- -----------
财务部 6001 10
财务部 6003 100
财务部 小计 110
营业部 8001 20
营业部 8002 30
营业部 小计 50
总计 小计 160
(所影响的行数为 7 行)
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询