【发布时间】:2019-06-14 16:28:39
【问题描述】:
我正在尝试使用内连接语法在一个查询中合并两个表记录。
table one
Unique_ID | School | Paid | Balance | Date |
+---------+--------+------------- --+-------+
112 MaryGold 200 500 2/5/19
112 MaryGold 300 200 9/5/19
107 MyKids 100 500 9/5/19
107 MyKids 100 400 2/6/19
and table two
Unique_ID | School | amountperterm | Academic_Year | Term | c_Paid | c_Balance |
+---------+--------+---------------+---------------+------+--------+-----------+
112 MaryGold 700 2019 / 2020 1 500 200
107 MyKids 600 2019 / 2020 1 200 400
表一显示每笔付款和余额的记录
表二显示了所有支付的总和和余额的记录
我想要一个连接查询,其中表 2 中的学校记录将链接到表 1 中的所有付款记录。
我正在使用 jasper 报告打印出所有学校记录及其各自的账单..
此代码适用于在 Jtable 中选择学校记录并按下 print_button 的情况。
int row = s_ThirdTerm.getSelectedRow();
try{
String table_click=(s_ThirdTerm.getModel().getValueAt(row,0).toString());
JasperDesign jd =JRXmlLoader.load("printOuts\\ucmasReciept.jrxml");
String sgl="select school_info.Unique_ID,school_info.School,school_info.amountperterm,school_info.Academic_Year,school_info.Term,school_info.currentallpaid,school_info.currentbalance,school_info.currentdate,school_bill_archive.Paid,\n" +
"school_bill_archive.Balance,school_bill_archive.Date from school_bill_archive INNER JOIN school_info on school_info.Term=school_bill_archive.Term and school_info.Unique_ID=school_bill_archive.Unique_ID and school_info.School='"+table_click+"'";
JRDesignQuery newQuery = new JRDesignQuery();
newQuery.setText(sgl);
jd.setQuery(newQuery);
JasperReport jr = JasperCompileManager.compileReport(jd);
JasperPrint jp = JasperFillManager.fillReport(jr,null,con);
JasperViewer.viewReport(jp,false);
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
它在表 2 中显示所选学校,并在表 1 中显示其账单支付的所有记录。
但我想要一种情况,我不会选择特定学校,但是当我点击 print_button 时,jasper 报告应该打开所有学校的记录及其各自的付款记录。
例如。如果我在表 2 中有 5 所学校,那么当我按下 print_button 时,我应该在 jasper 报告中有 5 页。每个页面都包含表 2 中的学校信息以及表 1 中的相应付款。
这是我编写的代码,但它所做的只是显示一个页面,其中包含表 2 中第一行的记录和表 1 中的所有记录。
try{
JasperDesign jd =JRXmlLoader.load("printOuts\\Reciept.jrxml");
String sgl="select school_info.Unique_ID,school_info.School,school_info.amountperterm,school_info.Academic_Year,school_info.Term,school_info.currentallpaid,school_info.currentbalance,school_info.currentdate,school_bill_archive.Paid,\n" +
"school_bill_archive.Balance,school_bill_archive.Date from school_bill_archive INNER JOIN school_info on school_info.Term=school_bill_archive.Term and school_info.Unique_ID=school_bill_archive.Unique_ID and school_info.School=school_bill_archive.School";
JRDesignQuery newQuery = new JRDesignQuery();
newQuery.setText(sgl);
jd.setQuery(newQuery);
JasperReport jr = JasperCompileManager.compileReport(jd);
JasperPrint jp = JasperFillManager.fillReport(jr,null,con);
JasperViewer.viewReport(jp,false);
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
【问题讨论】:
-
请edit 提出您的问题,并将表的结构包含为
CREATE TABLE语句,一些示例数据为INSERT INTO语句以及该示例数据的所需结果。就您目前的问题而言,尚不清楚它实际上是关于什么的。 -
为什么 school_info 会有一个“学期”属性?我的第一个猜测是,您的表格布局不正确。但如果您需要帮助,您确实需要向我们展示表格结构。
-
您为什么希望此查询过滤特定学校的付款?您查询中的特定学校在哪里?
-
如果您在 school_bill_archive 中引用 school_info,为什么加入不在 school_info.Unique_ID 上?
-
另外,请在每个连接表上使用别名。它使查询更具可读性。