关于报表设计

soulx 2010-03-01 02:29:23
数据库中有这样两个表

Record
Id type_id amount years months
1 1 100.00 2010 2
2 1 50.00 2010 2
3 3 200 2010 2

Type
Id type_name
1 A
2 B
3 C

报表条件如下:
根据检索条件(years和months)检索出满足条件(Record表的years和months)
的每一个Type的amount合计。结果集如下所示:
Report
Type_name sum_amount
A 150.00
B 0
C 50.00

我目前的做法是在数据库中建一个视图,得到所有的合计信息,SQL代码如下:

Select Type.Type_name,TypeAmount_Tmp.sum_amount, TypeAmount_Tmp.Years,
TypeAmount_Tmp.months
(
Select Record.type_id, sum(Record.amount) As sum_amount,
Record.years, Record.months
Record
From Record
Group by Record.type_id,Record.years, Record.months
) As TypeAmount_Tmp
Left Outer Join Type
On TypeAmount_Tmp. type_id = Type.id


然后在程序中,根据(years和month)检索条件检索相应数据。

目前这个方案有个问题就是:
因为Record没有Type=B的数据,所以通过视图得到的报表没有Type=B的数据,如下面:
Type_name sum_amount
A 150.00
C 50.00

而报表要像前面提到的Report那样展示。


请教各位高手,有什么好的办法,是哪块出现了问题,欢迎讨论。

...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
soulx 2010-03-03
  • 打赏
  • 举报
回复
soulx 2010-03-02
  • 打赏
  • 举报
回复
引用 8 楼 colin_pxx 的回复:
如果是java做的话在页面这样写
<listcell label="@{vo.typeId,converter='com.cea.common.converter.TypeNameConverter'}"/>
TypeNameConverter这个类传进去typeId,返回typeName.
不知道你明不明白
如果是Sql写的话
select type_name,sum(amount) from record,type where record.type_id = type.type_id group by record.type_id;


listcell是什么?


Record
Id type_id amount years months
1 1 100.00 2010 2
2 1 50.00 2010 2
3 3 200 2010 2
4 2 300.00 2010 3
Type
Id type_name
1 A
2 B
3 C

如果数据是上面这样
SQL这样写,不能得出2010.2所有type的amount
select type_name,sum(amount) from record,type where record.type_id = type.type_id group by record.type_id;
colin_pxx 2010-03-02
  • 打赏
  • 举报
回复
如果是java做的话在页面这样写
<listcell label="@{vo.typeId,converter='com.cea.common.converter.TypeNameConverter'}"/>
TypeNameConverter这个类传进去typeId,返回typeName.
不知道你明不明白
如果是Sql写的话
select type_name,sum(amount) from record,type where record.type_id = type.type_id group by record.type_id;
hchjjun 2010-03-02
  • 打赏
  • 举报
回复
用一个左连接,不就有了嘛
cds24515 2010-03-02
  • 打赏
  • 举报
回复
我是来赚积分的 ...
quxiuer 2010-03-02
  • 打赏
  • 举报
回复
Select Type.Type_name,TypeAmount_Tmp.sum_amount, TypeAmount_Tmp.Years,
TypeAmount_Tmp.months
(
Select Record.type_id, sum(Record.amount) As sum_amount,
Record.years, Record.months
Record
From Record
Group by Record.type_id,Record.years, Record.months
) As TypeAmount_Tmp
Join Type
On TypeAmount_Tmp. type_id = Type.id

yifei335 2010-03-01
  • 打赏
  • 举报
回复
我在做表报 楼主可以教我下吗?、
soulx 2010-03-01
  • 打赏
  • 举报
回复
引用 2 楼 vcshcn 的回复:
select type.type_name, sum(record.amount) from type left join record on type.id=record.type_id group by type.type_name


Record
Id type_id amount years months
1 1 100.00 2010 2
2 1 50.00 2010 2
3 3 200 2010 2
4 2 300.00 2010 3
Type
Id type_name
1 A
2 B
3 C

如果是上面这样的数据,我要检索2010.2的数据,你的SQL得到的结果是
Record
type_name sum(amount)
A 150.00
c 200.00

而我要得到的是这样的结果集
Report
Type_name sum_amount
A 150.00
B 0
C 50.00
vcshcn 2010-03-01
  • 打赏
  • 举报
回复
select type.type_name, sum(record.amount) from type left join record on type.id=record.type_id group by type.type_name
soulx 2010-03-01
  • 打赏
  • 举报
回复
自己顶!

回复内容太短了!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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