当前位置: 代码迷 >> 报表 >> 水晶报表这样的功能如何实现?
  详细解决方案

水晶报表这样的功能如何实现?

热度:208   发布时间:2016-05-05 08:14:00.0
水晶报表这样的功能怎么实现??
产品数据库: 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
Selecta.姓名, 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.产品IDUNION ALL SELECT stocktemp.姓名, product.ID, product.产品名称, product.规格, product.单价, product.折扣, 0 as 数量FROM product,stocktemp) as aGroup Bya.姓名, a.ID, a.产品名称, a.单价, a.折扣
------解决方案--------------------
没有源代码,除了写了个SQL,一句代码也没写。

把这个查询作为一个SQL语句,手工创建一个dateset里的datatable
然后参考下文,完成数据传递

至于报表设计,就是拖拖拉拉的工作了

【水晶报表内功心法】--PUSH模式样板招式 [推荐]

但是,你的折扣怎么算的,毕竟折扣不像数量直接sum就行了
------解决方案--------------------
做一个公式x1

Sum(总额,分组字段)*Sum(数量,分组字段)

然后把x1放到组页眉或组页脚,即可。
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Sun Oct 22 18:12:07 CST 2017
  • 最近登录:Sun Oct 22 18:12:07 CST 2017
  • 最近登录:Sun Oct 22 18:12:07 CST 2017
  • 最近登录:Sun Oct 22 18:12:07 CST 2017
  • 最近登录:Sun Oct 22 18:12:07 CST 2017