VB+Access这个SQL语句要怎么样写?

laixiang 2008-11-24 10:24:10
有三个表:
表名:CUSTOM 说明:银行储户资料
字段名 类型 宽度 小数位数 内容说明 内容要求
F001 字符型 20 卡号 非空,唯一
F002 字符型 60 储户名称 非空
F003 字符型 4 信用卡类型
F004 字符型 40 联系电话
F005 短日期 建档日期
F006 字符型 20 用户密码(初始密码:111111)


表名:MONEYS 说明:借贷表
字段名 类型 宽度 小数位数 内容说明 内容要求
F001 字符型 20 卡号 非空
F002 短日期 取款日期 非空
F003 数值型 10 默认为“0”
F004 字符型 4 “存”/“取”

表名:CARDTYPE 说明:信用卡类型编码表
字段名 类型 宽度 小数位数 内容说明 内容要求
F001 字符型 4 信用卡类型 非空,唯一
F002 数值型 10 可透支金额

要实现如下功能:

1、根据用户的“信用卡类型”从CUSTOM,MONEYS表里统计出每一种信用卡类型的用户数及当前的累计存款金额(关联条件:CUSTOM.F001=MONEYS.F001),并计算出所有信用卡类型的存款金额合计;数据填入下图左边的值列表里,包括:“信用卡类型”“用户数”“累计金额”。
2、根据每一个储户的存取明细(表:MONEYS,CUSTOM),统计出不同信用卡类型中的每一个储户的存款金额,并将统计数据填充在下图右边的值列表里,包括:卡号、储户姓名、存款金额。

信用卡类型 用户数 累计金额
A 5 950
B 2 50
C 8 -500
合计 15 500

卡号 储户姓名 存款金额
1001 a 50
1002 b -60

合计 -10


实现上面二个功能,SQL语句要怎么样写,我是用DAO操控数据库的.


...全文
267 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
laixiang 2008-11-25
  • 打赏
  • 举报
回复
这二条可以了:


但第一条
SELECT CUSTOM.F003 AS 信用卡类型, Count(CUSTOM.F002) AS 用户数, Sum(MONEYS.F003 * iif(MONEYS.F004 = '存', 1, -1)) AS 累计金额
FROM CUSTOM INNER JOIN MONEYS ON CUSTOM.F001 = MONEYS.F001
GROUP BY CUSTOM.F003;
会出现这样的统计错误:
Count(CUSTOM.F002) AS 用户数 这个统计出来的是MONEYS的存取记录数,例如A类型的信用卡,有一个用户,该用户"存"了500,"取"了300,但统计出来的"用户数"=2 正确的应该是"用户数"=1
Tiger_Zhao 2008-11-25
  • 打赏
  • 举报
回复
Group By 后面换成 卡号,储户姓名 试试。
laixiang 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Tiger_Zhao 的回复:]
没学过 SQL 吗,最简单的连接表、分组合计

SQL codeSELECT CUSTOM.F003 AS 信用卡类型, Count(CUSTOM.F002) AS 用户数, Sum(MONEYS.F003 * iif(MONEYS.F004 = '存', 1, -1)) AS 累计金额
FROM CUSTOM INNER JOIN MONEYS ON CUSTOM.F001 = MONEYS.F001
GROUP BY CUSTOM.F003;


Count(CUSTOM.F002) AS 用户数 这个统计出来的是MONEYS的存取记录数,例如A类型的信用卡,有一个用户,该用户"存"了500,"取"了300,但统计出来的"用户数"=2


第二个要求与数据举例不符,按照数据举例查询

SQL codeSELECT CUSTOM.F001 AS 卡号, CUSTOM.F002 AS 储户姓名, Sum(MONEYS.F003 * iif…
[/Quote]

这条语句出错,提示: 实时错误'3122' 试图执行的查询中不包含作为合计函数一部分的特定表达式'储户姓名'
应该是CUSTOM.F002 AS 储户姓名 这部分有错误,找不出什么原因.


Tiger_Zhao 2008-11-25
  • 打赏
  • 举报
回复
别忘了结帖。
初学 SQL 还是建议用 SQL Server,T-SQL 的语法帮助文档中可以查到,Access 的帮助实在烂的可以。
laixiang 2008-11-25
  • 打赏
  • 举报
回复
ok了,谢谢Tiger_Zhao
Tiger_Zhao 2008-11-25
  • 打赏
  • 举报
回复
SELECT A.信用卡类型, A.用户数, B.累计金额
FROM (SELECT CUSTOM.F003 AS 信用卡类型, Count(CUSTOM.F002) AS 用户数
FROM CUSTOM
GROUP BY CUSTOM.F003
) A
LEFT JOIN
(SELECT CUSTOM.F003 AS 信用卡类型, Sum(MONEYS.F003*IIf(MONEYS.F004='存',1,-1)) AS 累计金额
FROM CUSTOM
INNER JOIN MONEYS ON CUSTOM.F001=MONEYS.F001
GROUP BY CUSTOM.F003
) B ON B.信用卡类型 = A.信用卡类型;
yeah920 2008-11-24
  • 打赏
  • 举报
回复
学习了.
Tiger_Zhao 2008-11-24
  • 打赏
  • 举报
回复
没学过 SQL 吗,最简单的连接表、分组合计
SELECT CUSTOM.F003 AS 信用卡类型, Count(CUSTOM.F002) AS 用户数,  Sum(MONEYS.F003 * iif(MONEYS.F004 = '存', 1, -1)) AS 累计金额 
FROM CUSTOM INNER JOIN MONEYS ON CUSTOM.F001 = MONEYS.F001
GROUP BY CUSTOM.F003;

第二个要求与数据举例不符,按照数据举例查询
SELECT CUSTOM.F001 AS 卡号, CUSTOM.F002 AS 储户姓名,  Sum(MONEYS.F003 * iif(MONEYS.F004 = '存', 1, -1)) AS 存款金额
FROM CUSTOM INNER JOIN MONEYS ON CUSTOM.F001 = MONEYS.F001
GROUP BY CUSTOM.F001, CUSTOM.F002;
aohan 2008-11-24
  • 打赏
  • 举报
回复
select CARDTYPE.F001 ,count(*),sum(MONEYS.F003)
from CUSTOM inner join MONEYS on CUSTOM.F001=MONEYS.F001
inner join CARDTYPE on Custom.F001=CARDTYPE.F001
Group by CARDTYPE.F001

select CARDTYPE.F001 ,CARDTYPE.F002,sum(MONEYS.F003)
from CUSTOM inner join MONEYS on CUSTOM.F001=MONEYS.F001
where MONEYS.F004='存'
Group by CARDTYPE.F001 ,CARDTYPE.F002

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧