Как мне написать правильный запрос внутреннего соединения - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь объединить две записи таблицы в одном запросе, используя синтаксис внутреннего соединения.

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


В таблице 1 показаны записи по каждому отдельному платежу и остатку.
во второй таблице приведены записи о сумме всех произведенных платежей и остатке

Я хочу запрос на соединение, при котором школьная запись в таблице 2 будет связана со всеми записями о платежах в таблице 1.

Я использую отчет Джаспер, чтобы распечатать все школьные записи с соответствующими счетами.
этот код работает, когда в Jtable выбирается школьная запись и нажимается кнопка print_.

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_, должен появиться отчет о яшме с записями всех школ и соответствующими записями об оплате.

Например, если в таблице 2 5 школ, у меня должно быть 5 страниц в отчете о яшме, когда я нажимаю кнопку print_. каждая страница с информацией о школе из таблицы 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){
            }
            }


1 Ответ

0 голосов
/ 15 июня 2019

Если вы хотите увидеть все платежи для определенной школы, вам нужно добавить фильтр к вашему запросу, как показано ниже -

SELECT
<columns>
FROM school_info si
INNER JOIN school_bill_archive sba
ON si.Unique_ID = sba.Unique_ID -- This should be the joining key
WHERE si.Unique_ID = XX -- Replace XX with desire Unique ID
AND si.term = '<Put Term Value>'-- You can also filter by particular term if required
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...