| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3730 人关注过本帖
标题:求一句SQL语句解决问题
只看楼主 加入收藏
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
收藏
得分:0 
你的分块汇总是用SQL 不是用的其他命令嘛.
你可以先把每个表的汇总用SQL搞出来.达到你的要求后.无外就是把这几个分块的SQL鑲套起来就是了

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2016-12-06 17:30
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
统计结构:求出到11月末
客户编码,客户名称,本月发出,本月开票,本月回款,累计发出,累计开票,累计回款

A表:客户信息表(客户编码,客户名称)
   客户编码   客户名称
     0001      AA公司
     0002      BB公司
     0003      CC公司

B表:发出商品表(日期,客户编码,发出金额)
   日期    客户编码   发出金额
 2016-1-1    0002     1000.00
 2016-1-10   0003      800.00
 2016-3-5    0001      700.00
 2016-3-10   0001      500.00
 2016-3-20   0003     2000.00
 ... ...
 2016-11-10  0001      600.00
 2016-11-11  0003      500.00


C表:开票信息表(日期,客户编码,开票金额)
  日期    客户编码   开票金额
 2016-1-10   0002     1000.00
 2016-1-13   0003      800.00
 2016-3-9    0001      700.00
 2016-3-16   0001      500.00
 2016-3-22   0003     2000.00
 ... ...
 2016-11-10  0001      600.00
 2016-11-11  0003      500.00


D表:回款信息表(日期,客户编码,回款金额)
  日期    客户编码   回款金额
 2016-1-6    0002      900.00
 2016-1-10   0003      400.00
 2016-3-8    0001      600.00
 2016-3-15   0001      500.00
 2016-3-27   0003     1000.00
 ... ...
 2016-11-15  0001      700.00
 2016-11-20  0003      600.00

* 本月发出,本月日期用 date()取得
select  客户编码,sum(发出金额) as 本月发出 from 发出商品表 where between(日期,date(year(date()),month(date()),1),gomonth(date(year(date()),month(date()),1),1)-1) group by 客户编码

* 本月开票,本月日期用 date()取得
select  客户编码,sum(开票金额) as 本月开票 from 开票信息表 where between(日期,date(year(date()),month(date()),1),gomonth(date(year(date()),month(date()),1),1)-1) group by 客户编码

* 本月回款,本月日期用 date()取得
select  客户编码,sum(回款金额) as 本月回款 from 回款信息表 where between(日期,date(year(date()),month(date()),1),gomonth(date(year(date()),month(date()),1),1)-1) group by 客
户编码

* 累计发出,日期到 2016-11-31
select  客户编码,sum(发出金额) as 累计发出 from 发出商品表 where 日期<date(2016,12,1) group by 客户编码

* 本月开票,日期到 2016-11-31
select  客户编码,sum(开票金额) as 累计开票 from 开票信息表 where 日期<date(2016,12,1) group by 客户编码

* 本月回款,日期到 2016-11-31
select  客户编码,sum(回款金额) as 累计回款 from 回款信息表 where 日期<date(2016,12,1) group by 客户编码

把上面的6个查询,用 left join 来连接 第1个表“客户信息表”,就可以
2016-12-06 17:36
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
收藏
得分:0 
哈哈.班主就是班主.直接就给出代码了.我也直接拷贝下来.存起来.万一下次要用.直接套了

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2016-12-06 17:42
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
12楼的朋友您好,我是使用您说的模式做的,但我总觉得可以使用一句SELECT语句就能完成,就是不会写。谢谢指教!
2016-12-06 19:11
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用yll148在2016-12-6 19:11:09的发言:

12楼的朋友您好,我是使用您说的模式做的,但我总觉得可以使用一句SELECT语句就能完成,就是不会写。谢谢指教!
*年参数nYear,月参数nMonth
local nYear,nMonth,S_date,E_date
nYear=2016
nMonth=11
S_date = date(nYear,nMonth,1) &&本月的第1天
E_date = gomonth(S_date,1)-1  &&本月最后1天

select a1.客户编码,a1.客户名称,本月发出,本月开票,本月回款,累计发出,累计开票,累计回款 from 客户信息表 a1 ;
left join (select 客户编码,sum(发出金额) as 本月发出 from 发出商品表 where between(日期,S_date,E_date) group by 客户编码)b1 on a1.客户编码=b1.客户编码 ;
left join (select 客户编码,sum(开票金额) as 本月开票 from 开票信息表 where between(日期,S_date,E_date) group by 客户编码)c1 on a1.客户编码=c1.客户编码 ;
left join (select 客户编码,sum(回款金额) as 本月回款 from 回款信息表 where between(日期,S_date,E_date) group by 客户编码)d1 on a1.客户编码=d1.客户编码 ;
left join (select 客户编码,sum(发出金额) as 累计发出 from 发出商品表 where 日期<=E_date group by 客户编码)b2 on a1.客户编码=b2.客户编码 ;
left join (select 客户编码,sum(开票金额) as 累计开票 from 开票信息表 where 日期<=E_date group by 客户编码)c2 on a1.客户编码=c2.客户编码 ;
left join (select 客户编码,sum(回款金额) as 累计回款 from 回款信息表 where 日期<=E_date group by 客户编码)d2 on a1.客户编码=d2.客户编码 ;
order by a1.客户编码
2016-12-07 00:12
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11826
专家分:43421
注 册:2006-5-13
收藏
得分:0 
楼主是在精益求精啊!

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-12-07 07:37
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
不是代码短了就高效。想代码更高效,得看语句和环境。

楼主的环境可能更适用一条命令解决。
2016-12-07 09:22
yll148
Rank: 2
等 级:论坛游民
威 望:3
帖 子:268
专家分:15
注 册:2012-7-3
收藏
得分:0 
15楼的朋友您好,我使用您的句子,没有成功啊?请您再看看,谢谢!
2016-12-07 12:19
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用yll148在2016-12-7 12:19:52的发言:

15楼的朋友您好,我使用您的句子,没有成功啊?请您再看看,谢谢!

CLOSE DATABASES

* 利用6楼数据
select 编码 as 客户编码,名称 as 客户名称 from g:\dbf\khbm.dbf into curs 客户信息表 READWRITE
select khbm as 客户编码,金额 as 开票金额,开票日期 as 日期 from g:\dbf\kpxx.dbf into curs 开票信息表 READWRITE
select khbm as 客户编码,回款金额,日期 from g:\dbf\hkxx.dbf into curs 回款信息表 READWRITE
select khbm as 客户编码,金额 as 发出金额,日期 from g:\dbf\fcsp.dbf into curs 发出商品表 READWRITE

** 上面的是原来表的结构,为了适应下面查询,我先处理一下你原表
** 你客户信息表 有594个客户,但你“开票信息表,回款信息表,发出商品表”的记录最多才60多,所以很多是 0
** 由于你要统计本月和累计数,所以,统计时间只能按年月,我在统计表上加了个“年月”字段
local nYear,nMonth,S_date,E_date
nYear=2016
nMonth=10
S_date = date(nYear,nMonth,1) &&本月的第1天
E_date = gomonth(S_date,1)-1  &&本月最后1天

select TRANSFORM(nYear)+'年'+TRANSFORM(nMonth)+'月' as 统计年月,a1.客户编码,a1.客户名称, ;
IIF(ISNULL(本月发出),0,本月发出) as 本月发出,IIF(ISNULL(本月开票),0,本月开票) as 本月开票,IIF(ISNULL(本月回款),0,本月回款) as 本月回款, ;
IIF(ISNULL(累计发出),0,累计发出) as 累计发出,IIF(ISNULL(累计开票),0,累计开票) as 累计开票,IIF(ISNULL(累计回款),0,累计回款) as 累计回款 from 客户信息表 a1 ;
left join (select 客户编码,sum(发出金额) as 本月发出 from 发出商品表 where between(日期,S_date,E_date) group by 客户编码)b1 on a1.客户编码=b1.客户编码 ;
left join (select 客户编码,sum(开票金额) as 本月开票 from 开票信息表 where between(日期,S_date,E_date) group by 客户编码)c1 on a1.客户编码=c1.客户编码 ;
left join (select 客户编码,sum(回款金额) as 本月回款 from 回款信息表 where between(日期,S_date,E_date) group by 客户编码)d1 on a1.客户编码=d1.客户编码 ;
left join (select 客户编码,sum(发出金额) as 累计发出 from 发出商品表 where 日期<=E_date group by 客户编码)b2 on a1.客户编码=b2.客户编码 ;
left join (select 客户编码,sum(开票金额) as 累计开票 from 开票信息表 where 日期<=E_date group by 客户编码)c2 on a1.客户编码=c2.客户编码 ;
left join (select 客户编码,sum(回款金额) as 累计回款 from 回款信息表 where 日期<=E_date group by 客户编码)d2 on a1.客户编码=d2.客户编码 ;
order by a1.客户编码


[此贴子已经被作者于2016-12-7 14:43编辑过]

2016-12-07 12:26
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 19楼 mywisdom88
表中出现了"*"号?
图片附件: 游客没有浏览图片的权限,请 登录注册

数据哪去了

[此贴子已经被作者于2016-12-7 15:41编辑过]

2016-12-07 15:22
快速回复:求一句SQL语句解决问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019083 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved