在 table 上显示每个产品的总金额
Display total amount of each products on the table
我有一个名为 prod_Table
的 table,我从 SQL 查询中得到:
SELECT PROD_ID, PROD_NAME, AMT, FROM ITEMS ORDER BY PROD_NAME;
我正在使用 itextpdf 显示 table。我能够根据 PROD_NAME
:
分开 table
APPLE
PROD_ID | AMT
11111 12.75
22222 13.75
33333 14.75
ORANGE
PROD_ID | AMT
44444 15.75
55555 16.75
但现在我想在每个产品的总计下方显示。输出是这样的:
APPLE
PROD_ID | AMT
11111 12.75
22222 13.75
33333 14.75
TOTAL: 41.25
ORANGE
PROD_ID | AMT
44444 15.75
55555 16.75
TOTAL: 32.5
这是我能做的最好的,输出甚至不正确。我几乎卡住了。
List<String> prod_Names = new ArrayList<>();
int total = 0;
while(rs.next()){
String prodName = rs.getString(2);
if (!prod_Names.contains(prodName)){
prod_Names.add(prodName);
PdfPCell name = new PdfPCell(new Phrase(prodname, bold));
name.setColspan(2);
prod_Table.addCell(name);
prod_Table.addCell(new Phrase("PROD_ID", header_Bold));
prod_Table.addCell(new Phrase("AMT", header_Bold));
}
String prodId_Values = result.getInt(1);
int amt_Values = result.getInt(3);
total += amt_Values;
//Display Values
prod_Table.addCell(new Phrase(Integer.toString(prodId_Values), normalFont));
prod_Table.addCell(new Phrase(Integer.toString(amt_Values), normalFont));
// Display Total
prod_Table.addCell(new Phrase("TOTAL:", normalFont));
prod_Table.addCell(new Phrase(Integer.toString(total), normalFont));
}
我的代码输出:
APPLE
PROD_ID | AMT
11111 12.75
TOTAL: 12.75
22222 13.75
TOTAL: 26.5
33333 14.75
TOTAL: 41.25
ORANGE
PROD_ID | AMT
44444 15.75
TOTAL: 57.00
55555 16.75
TOTAL: 73.75
您可以将总计放在查询结果的每一行中 window 总和:
select prod_id, prod_name, amt, sum(amt) over(partition by prod_name) as total_amt
from items
order by prod_name;
然后剩下要做的就是安排应用程序代码,使 total_amt
显示在与 prod_name
相同的级别。据我了解你的问题,你已经有了那个逻辑。
我有一个名为 prod_Table
的 table,我从 SQL 查询中得到:
SELECT PROD_ID, PROD_NAME, AMT, FROM ITEMS ORDER BY PROD_NAME;
我正在使用 itextpdf 显示 table。我能够根据 PROD_NAME
:
APPLE
PROD_ID | AMT
11111 12.75
22222 13.75
33333 14.75
ORANGE
PROD_ID | AMT
44444 15.75
55555 16.75
但现在我想在每个产品的总计下方显示。输出是这样的:
APPLE
PROD_ID | AMT
11111 12.75
22222 13.75
33333 14.75
TOTAL: 41.25
ORANGE
PROD_ID | AMT
44444 15.75
55555 16.75
TOTAL: 32.5
这是我能做的最好的,输出甚至不正确。我几乎卡住了。
List<String> prod_Names = new ArrayList<>();
int total = 0;
while(rs.next()){
String prodName = rs.getString(2);
if (!prod_Names.contains(prodName)){
prod_Names.add(prodName);
PdfPCell name = new PdfPCell(new Phrase(prodname, bold));
name.setColspan(2);
prod_Table.addCell(name);
prod_Table.addCell(new Phrase("PROD_ID", header_Bold));
prod_Table.addCell(new Phrase("AMT", header_Bold));
}
String prodId_Values = result.getInt(1);
int amt_Values = result.getInt(3);
total += amt_Values;
//Display Values
prod_Table.addCell(new Phrase(Integer.toString(prodId_Values), normalFont));
prod_Table.addCell(new Phrase(Integer.toString(amt_Values), normalFont));
// Display Total
prod_Table.addCell(new Phrase("TOTAL:", normalFont));
prod_Table.addCell(new Phrase(Integer.toString(total), normalFont));
}
我的代码输出:
APPLE
PROD_ID | AMT
11111 12.75
TOTAL: 12.75
22222 13.75
TOTAL: 26.5
33333 14.75
TOTAL: 41.25
ORANGE
PROD_ID | AMT
44444 15.75
TOTAL: 57.00
55555 16.75
TOTAL: 73.75
您可以将总计放在查询结果的每一行中 window 总和:
select prod_id, prod_name, amt, sum(amt) over(partition by prod_name) as total_amt
from items
order by prod_name;
然后剩下要做的就是安排应用程序代码,使 total_amt
显示在与 prod_name
相同的级别。据我了解你的问题,你已经有了那个逻辑。