数据库中有这样两个表Record
Id  type_id  amount  years  months 
1   1        100.00  2010   2
2   1        50.00   2010   2
3   3        200     2010   2Type
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那样展示。
请教各位高手,有什么好的办法,是哪块出现了问题,欢迎讨论。

解决方案 »

  1.   

    select type.type_name, sum(record.amount) from type left join record on type.id=record.type_id group by type.type_name
      

  2.   


    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 
      

  3.   

    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
      

  4.   

    如果是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;
      

  5.   


    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;