设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1615|回复: 9
打印 上一主题 下一主题

[查询] [求助]请高手帮忙研究一个比较复杂的查询,感激

[复制链接]
跳转到指定楼层
1#
发表于 2006-6-21 08:03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
统计数据表中,同一客户连续某一连续时间段内(如10天)收入或者支出的合计数超过指定金额(如400元)的记录

显示方式一
输出要求字段主要包括
客户             开始日期  结束日期  收入笔数(或支出笔数)  合计金额
900102083 2006-4-1  2006-4-10    5                                   470.03
900102083 2006-4-2  2006-4-11    4                                   440.03
900102083 2006-4-3  2006-4-12    4                                   440.03
900102083 2006-4-4  2006-4-13    5                                   495.03
……                    ……      ……       ……                                  ……

显示方式二
由于客户不是天天有收支发生的,所以输出也可以如下显示
序号       客户        日期       收入金额   支出金额    未来连续10天内发生的收入   未来连续10天内发生的支出
001      080110043    2006-4-1     117.00       0.00      117                            0
002      900100062    2006-4-1     120.00       0.00
003      900102083    2006-4-1     60.00        0.00
004      900102083    2006-4-1     70.00        0.00
005      900102172    2006-4-1     50.00        0.00
006      500100045    2006-4-1     400.00       0.00
007      500100106    2006-4-1     0.00       117.00
008      820102070    2006-4-3     100.00       0.00
009      900100051    2006-4-3     0.00       150.00
010      900102055    2006-4-3     160.00       0.00
……    ……            ……     ……   ……     ……

上面第二种方式显示的数据序号跟ACCESS数据表中的序号一致,未来连续10天是从当前记录的日期算起


希望高手指导一下,这个查询我感觉太复杂,无法编写好查询表,
如能使用SQL实现也可以。感谢大家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-6-21 17:01:00 | 只看该作者
日期是直接利用表中的数据还是另外生成?如是直接利用:

try:

SELECT (select sum(收入) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS sr, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS srbs, (select sum(支出) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zc, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zcbs, *
FROM [select *,dateadd('d',10,日期) AS jsrq  from [date]]. AS a;
3#
发表于 2006-6-21 17:11:00 | 只看该作者
也可以先按日期 、客户分组后,再用上述代码。
4#
发表于 2006-6-21 17:27:00 | 只看该作者
or

SELECT a.客户, a.日期, a.jsrq, sum(b.收入) as sr, sum(b.支出) AS zc, count(*) as bs
FROM (select *,dateadd('d',10,日期) AS jsrq  from [date]) AS a LEFT JOIN (select *,dateadd('d',10,日期) AS jsrq  from [date]) AS b ON (b.客户=a.客户) AND (b.日期 between a.日期 and a.jsrq )
GROUP BY a.客户, a.日期, a.jsrq;
5#
 楼主| 发表于 2006-6-22 02:37:00 | 只看该作者
以下是引用wwwwa在2006-6-21 9:27:00的发言:


or

SELECT a.客户, a.日期, a.jsrq, sum(b.收入) as sr, sum(b.支出) AS zc, count(*) as bs
FROM (select *,dateadd('d',10,日期) AS jsrq  from [date]) AS a LEFT JOIN (select *,dateadd('d',10,日期) AS jsrq  from [date]) AS b ON (b.客户=a.客户) AND (b.日期 between a.日期 and a.jsrq )
GROUP BY a.客户, a.日期, a.jsrq;

这段代码能成功运行,2楼的代码提示有错误,暂时没有找到错误解决方法。

这基本能解决我遇到的问题,wwwwa,感谢您,如果方便,还想请教一下查询的思路,这个查询结构对我来说,真的有难度。
6#
发表于 2006-6-22 15:36:00 | 只看该作者
以下是引用samsonbox在2006-6-21 18:37:00的发言:



这段代码能成功运行,2楼的代码提示有错误,暂时没有找到错误解决方法。


这基本能解决我遇到的问题,wwwwa,感谢您,如果方便,还想请教一下查询的思路,这个查询结构对我来说,真的有难度。



SELECT (select sum(收入) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS sr, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS srbs, (select sum(支出) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zc, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zcbs, *
FROM (select *,dateadd('d',10,日期) AS jsrq  from [date])  AS a;

ACCESS将FROM后面的语句用中括号括起来,用“()”代替即可
7#
 楼主| 发表于 2006-6-23 10:24:00 | 只看该作者
以下是引用wwwwa在2006-6-22 7:36:00的发言:





SELECT (select sum(收入) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS sr, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS srbs, (select sum(支出) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zc, (select count(*) from [date] where 客户=a.客户 and 日期 between a.日期 and jsrq ) AS zcbs, *
FROM (select *,dateadd('d',10,日期) AS jsrq  from [date])  AS a;

ACCESS将FROM后面的语句用中括号括起来,用“()”代替即可

经过结果分析,查询有未完全达到效果,主要问题是在当同一个客户同一天发生多笔收或支的情况下,统计有重复累计的情况,我后来把条件在修改了一下,把A表用分组输出,其他不改变,基本上满足要求。不过美中不足的是,笔数是收支的合计笔数,而不是收的笔数和支的笔数分开统计,可能需要把两种情况分别查询才能达到最终目的了。
8#
发表于 2006-6-23 15:41:00 | 只看该作者
而不是收的笔数和支的笔数分开统计:分别统计收<>0 OR 支<>0的笔数
9#
发表于 2006-6-26 16:47:00 | 只看该作者
如 :SUM(IIF(收<>0 ,1,0)) AS 收笔数

SUM(IIF(支<>0 ,1,0)) AS 支笔数
10#
发表于 2006-7-23 02:39:00 | 只看该作者
没有看明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 04:46 , Processed in 0.087252 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表