Office中国论坛/Access中国论坛
标题: 这样的视图怎么做??? [打印本页]
作者: adge 时间: 2003-5-8 05:59
标题: 这样的视图怎么做???
表1
日期 姓名 销售金额
4-2 小李 100
4-2 小张 150
4-3 小陈 100
4-3 小李 200
表2
日期 姓名 业务费用
4-1 小李 50
4-1 小张 60
我想得到一个日期段内各员工的销售和业务的费用做成一个视图,如下:
姓名 销售金额 业务费用
小李 300 50
小张 150 60
小陈 100 0
直接通过表1和表2能得到以上的结果吗???????
请大家帮帮忙,,,,,,
在线紧急等待!!!!!!!!!!!!!!
[em03]
作者: Roadbeg 时间: 2003-5-8 16:37
以下定义了两个表 test1,test2,其中字段 UID 对应于你的表中的姓名, test1 的 no 字段对应于销售金额, test2 的 NO 字段对应于 业务费用.dtm 字段对应于日期.
我在视图中加入了 dtm > 3-29 的 where 条件,你可能要根据自己的要求更改此限定.
SELECT ta.UID, ta.NOA, tb.NOB
FROM (SELECT UID, SUM([NO]) AS NOA
FROM test1
WHERE dtm > '2003-03-30'
GROUP BY uid) ta FULL OUTER JOIN
(SELECT uid, SUM([no]) AS NOB
FROM test2
WHERE dtm > '2003-03-30'
GROUP BY uid) tb ON ta.UID = tb.uid
作者: adge 时间: 2003-5-10 05:21
谢谢Roadbeg!
试验了不通过,出现ADO错误:语法错误或违反访问规则。
我不理解ta,tb是什么概念?
作者: Roadbeg 时间: 2003-5-10 06:34
ado 错?我这是在企业管理器里直接写的.等下调试一段代码给你.
[此贴子已经被作者于2003-5-9 23:08:26编辑过]
作者: Roadbeg 时间: 2003-5-10 07:08
我试了在 adp 中可以运行啊,你是在 adp 中还是 mdb 中?
或者你如此改动试一下.
SELECT ta.UID, ta.NOA, tb.NOB
FROM (SELECT UID, SUM([NO]) AS NOA
FROM test1
WHERE dtm > #2003-03-30#
GROUP BY uid) as ta FULL OUTER JOIN
(SELECT uid, SUM([no]) AS NOB
FROM test2
WHERE dtm > #2003-03-30#
GROUP BY uid) as tb ON ta.UID = tb.uid
ta,tb 是子查询的别名.
[此贴子已经被作者于2003-5-10 15:29:07编辑过]
作者: adge 时间: 2003-5-12 11:35
在win2k+access2002的adp下测试:
如小陈在4月内只有销售额而没有业务费,则只会显示一项业务费用,而这一行没有销售员姓名。
这样得出的结果让人看到有销售额而不知道是哪个销售员的。
作者: adge 时间: 2003-5-12 11:44
以下是引用adge在2003-5-12 3:35:02的发言:
在win2k+access2002的adp下测试:
如小陈在4月内只有销售额而没有业务费,则只会显示一项业务费用,而这一行没有销售员姓名。
这样得出的结果让人看到有销售额而不知道是哪个销售员的。
我知道原因了,如果当得出的查询是用ta.UID的话,则ta中有纪录就可以显示UID及ta,tb中的查询,如ta中没有纪录tb中有的话,则就会有显示tb中的纪录,但显示不出UID,这个问题还是达不到原题意的结果!!
请Roadbeg帮忙能否得到原题意的结果!
再度谢谢Roadbeg!!!!!!!!!!!![em05]
作者: Roadbeg 时间: 2003-5-12 23:04
SELECT tc.uid, ta.NOA, tb.NOB
FROM (SELECT UID, SUM([NO]) AS NOA
FROM test1
WHERE dtm > '2003-03-30'
GROUP BY uid) ta RIGHT OUTER JOIN
(SELECT uid, SUM([no]) AS NOB
FROM test2
WHERE dtm > '2003-03-30'
GROUP BY uid) tb RIGHT OUTER JOIN
(SELECT DISTINCT uid
FROM test1
WHERE dtm > '2003-03-30'
UNION
SELECT DISTINCT uid
FROM test2
WHERE dtm > '2003-03-30') tc ON tb.uid = tc.uid ON ta.UID = tc.uid
同样的,你可能要把 '2003-03-30' 换成 #2003-03-30#
并且 (select.....) tb 换成 (select .... ) as tb 等等.
作者: adge 时间: 2003-5-15 03:59
试验通过,谢谢ROADGEG!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |