产品数据库: ID 产品名称 规格
001 wwwwwwww wwww
002 qqqqqqqq qqqq
003 dddddddd dddd
004 ssssssss ssss
005 eeeeeeee eeee
销售数据库:iD 产品名称 规格 数量
001 wwwwwwww wwww 10
002 qqqqqqqq qqqq 20
001 wwwwwwww wwww 15
005 eeeeeeee eeee 10
005 eeeeeeee eeee 15
报表要实现的功能:ID 产品名称 规格 数量
001 wwwwwwww wwww 25
002 qqqqqqqq qqqq 20
003 dddddddd dddd
004 ssssssss ssss
005 eeeeeeee eeee 25
------解决方案--------------------
直接管理是不行的,用外关联保证数据不丢失(004)
SELECT a.ID, a.产品名称,a.产品规格,b.数量
FROM CSDN_20100812_产品 a LEFT OUTER JOIN CSDN_20100812_销售b ON a.ID=b.iD
这样就可以得到结果全集,然后再做个汇总就行了,可以在SQL里直接做,或者在水晶报表里实现。
1:SQL 法
SELECT x.ID, x.产品名称,x.产品规格, Sum(x.数量) as 数量
from
( SELECT a.ID, a.产品名称,a.产品规格,b.数量
FROM CSDN_20100812_产品 a LEFT OUTER JOIN CSDN_20100812_销售b ON a.ID=b.iD)
as x
Group by x.ID, x.产品名称,x.产品规格
2:水晶报表法,在水晶报表中设置两个表外关联
然后设置模板
------解决方案--------------------
在这种数据情况下,你想实现什么效果呢?
如果是
按人分组,显示全部产品的销售列表(包含该人没有销售,但是产品代码表中有的数据)
这样的话,直接做外关联是不行的,可以采用union一个空表的方法
首先说一下,你的数据库设计是有问题的
1:产品表和人员销售表 字段设计重复,严重的违反了范式设计要求
stocktemp中,应该只有ID,姓名,产品ID和数量4个字段
(当然,可能有特殊要求需要这样设计,但是一般意义上应该只要这4个字段)
进一步说,姓名这个也应该单独建表,这里应该放一个姓名ID
2:关联字段类型设置错误
产品表ID为数值型,但是在stocktemp中产品ID为文本型,不能直接关联
(当然,可能你是用产品名称关联的。。)
撇开这些不谈。。 把stocktemp中产品ID改为数值型后
在Access中,构造如下语句
实际关联数据 union 一个笛卡尔积的0数据集(为了保证产品全部显示)
并进行聚合
语句如下
- C# code
Select a.姓名, a.ID, a.产品名称, a.规格, a.单价, a.折扣, Sum(a.数量) as 数量 ( SELECT stocktemp.姓名, product.ID, product.产品名称, product.规格, product.单价, product.折扣, stocktemp.数量 FROM product INNER JOIN stocktemp ON product.ID = stocktemp.产品ID UNION ALL SELECT stocktemp.姓名, product.ID, product.产品名称, product.规格, product.单价, product.折扣, 0 as 数量 FROM product,stocktemp ) as a Group By a.姓名, a.ID, a.产品名称, a.单价, a.折扣
------解决方案--------------------
没有源代码,除了写了个SQL,一句代码也没写。
把这个查询作为一个SQL语句,手工创建一个dateset里的datatable
然后参考下文,完成数据传递
至于报表设计,就是拖拖拉拉的工作了
【水晶报表内功心法】--PUSH模式样板招式 [推荐]
但是,你的折扣怎么算的,毕竟折扣不像数量直接sum就行了
------解决方案--------------------
做一个公式x1
Sum(总额,分组字段)*Sum(数量,分组字段)
然后把x1放到组页眉或组页脚,即可。