设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 这样的子查询如何做(问题解决)

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-23 13:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 su_xx 于 2009-2-25 15:04 编辑

例子如附件,有3个表a, b,c .              c和a、c和b是按客户ID一对多关系。想要做一个按客户ID分组合计查询,但要求是a表和b表都是按自己的时间段来求合。一般情况下做2个查询,a表按某段时间的查询,b表也是,再根据这2查询再做一个合计查询。我现在的问题是想在一个查询里以子查询方式是否可以实现?因为本人对子查询还是不太懂,请高手给个例子指点一下。谢谢了!

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-2-23 16:35:03 | 只看该作者
你的意思是:不做A,B查询,直接做一个合计查询(根据设定日期段来求合)?
你看看这样做对不对?

本帖子中包含更多资源

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

x
3#
 楼主| 发表于 2009-2-24 09:10:03 | 只看该作者
谢谢楼上的,这样子我自己会做的,我只是想要知道不做A,B查询.直接做一个合计查询,用子查询能不能实现.而不是你这样用窗体.
4#
发表于 2009-2-24 09:20:37 | 只看该作者
把您想要得到的结果,贴个图出来。
5#
发表于 2009-2-24 09:24:49 | 只看该作者
有点像在绕口令,不知道是不是这个意思
SELECT c.客户名称, b.日期 AS 出货日期, a.日期 AS 回款日期, Sum(b.货款) AS 货款之总计, Sum(a.回款) AS 回款之总计
FROM (c INNER JOIN a ON c.客户ID = a.客户ID) INNER JOIN b ON c.客户ID = b.客户ID
GROUP BY c.客户名称, b.日期, a.日期;
6#
 楼主| 发表于 2009-2-25 14:19:27 | 只看该作者
谢谢版主的回复,可能是我说的不清楚,不是你上面写得哪样:如果不根据时间段下面就可以实现.
==================================================
SELECT c.客户名称, Sum(b.货款) AS 货款总计, Sum(a.回款) AS 回款总计
FROM (c INNER JOIN a ON c.客户ID = a.客户ID) INNER JOIN b ON c.客户ID = b.客户ID
GROUP BY c.客户名称;
====================================================
如果sum(b.货款)  AS 货款总计 ,Sum(a.回款) AS 回款总计 有时间段限制如何写,比如货款时间是2008/1/1到2008/12/31 ,回款是2008/6/1到2009/1/31.
=========================================
解决方法有好多,我想要的问题在一个SQL查询里能不能实现各个表有时间段的限制语句.,只是好奇一下我这种想法可不可行.
7#
发表于 2009-2-25 14:49:03 | 只看该作者
谢谢版主的回复,可能是我说的不清楚,不是你上面写得哪样:如果不根据时间段下面就可以实现.
==================================================
SELECT c.客户名称, Sum(b.货款) AS 货款总计, Sum(a.回款) AS 回款 ...
su_xx 发表于 2009-2-25 14:19



问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧

建议你想办法让别人明白你的需求是什么。否则是在浪费所有人的时间来让别人猜来猜去。

我试着猜一下你要的结果。猜不对就拉倒。

select c.客户ID,c.客户名称,r.s回款,p.s货款
from (c left join (
    select 客户ID,sum(回款) as s回款
    from a
    where 日期 between #2008/6/1# and #2009/1/31#
    group by 客户ID
) r on c.客户ID=r.客户ID)
left join (
    select 客户ID,sum(货款) as s货款
    from b
    where 日期 between #2008/1/1# and #2008/12/31#
    group by 客户ID
) p on c.客户ID=p.客户ID



******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
8#
 楼主| 发表于 2009-2-25 15:02:25 | 只看该作者
谢谢楼上,你写的就是我想要的问题,我自己也在思考,也找到解决方法.我正在学习sql子查询,找点例子做做.
问题解决,谢谢楼上的各位的回复和帮忙.
SELECT c.客户名称, Sum(b查询.货款) AS 货款总计, Sum(a查询.回款) AS 回款总计
FROM (c INNER JOIN [SELECT a.* FROM a WHERE a.日期 Between #1/1/2007#/1 And #12/31/2008#]. AS a查询 ON c.客户ID = a查询.客户ID) INNER JOIN [SELECT b.* FROM b WHERE b.日期 Between #1/1/2008#/1 And #12/31/2009#]. AS b查询 ON c.客户ID = b查询.客户ID
GROUP BY c.客户名称
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 16:51 , Processed in 0.125772 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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