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