Хорошо, я все еще пытаюсь понять проблему. Но я думаю, что при доступе к базе данных вы можете сохранить итоги для XTSM, XTS, XRX и XHAN.
Или просто рассчитать COUNT, где XTSM "?" (в подготовленном отчете). Я понимаю, что, может быть, это очень много для базы данных, которая уже довольно большая.
В любом случае, вы также можете сделать это в java, поскольку в последнем цикле for я == COUNT.
Кстати, ваш псевдокод должен определять XTS в XTSM, потому что если он не пройдет через все XTS в базе данных, а не все XTS, связанные с вашим конкретным XTSM.
Больше идей, в ваших четырех форсах (я всегда хотел сказать это :)), вы могли бы добавить к счету какие-то ifs, чтобы вы знали, если вы зацикливаетесь на XTS, которая имеет логическое отношение с XTSM и снова в конце цикла я = COUNT.
Немного больше информации было бы замечательно, так как я думаю, что я не понимаю проблему подробно.
Как вы получаете данные из базы данных?
Есть ли у вас класс, который хранит это? Может быть, вы могли бы сделать несколько методов, чтобы вычислить это.
Я думаю, что простой класс
публичный класс Foo {
int XTSM;
int XTS;
int XRX;
INT XHAN;
}
и последующее сохранение всех строк в списке (или в векторе, или на карте, что-то итеративное), считая элементы в списке, которые имеют XTSM = x и XTS = y
Это сделает более или менее то, что вы пытаетесь сделать?
Редактировать: возможно, этот код помогает, не знаю, если это то, что вы ищете ... подумав, я думаю, что какой-то PL (если вы находитесь в ORACLE) сделает это быстрее. Во всяком случае, немного кода Jave ...
public class Foo {
int XTSM;
int XTS;
int XRX;
int XHAN;
LinkedList lk;//maybe not a good idea to have it here
//but hey, it's a 30seconds thought...
public void getItAll() throws Exception{//mostly SQLException, but any you need
Connection conn=null;
//make the connection
String query="SELECT XTSM, XTS, XRX, XHAN " +
" FROM your_table" +
" WHERE 1=1" +
" AND 1=1";//add stuff you need to the query
Statement stmt= conn.createStatement();
ResultSet rst = stmt.executeQuery(query);
Foo f = null;
while(rst.next()){
f = new Foo();
//yeah, you should have getters and setters
f.XTSM = rst.getInt("XSTM");
f.XTS = rst.getInt("XST");
f.XRX = rst.getInt("XRX");
f.XHAN = rst.getInt("XHAN");
this.lk.add(f);
//this gives you all the table in a list (especifically a linkedlist
}
}
public void calculateItAll() throws Exception{//some exception, probably IO?
Foo f = null;
int count =0;
for(int i=0; i< this.lk.size(); i++){//we iterate through all the table
f = new Foo();
f = (Foo)this.lk.get(i);
count = 0;
for(int j=0; j<=200;j++){//XSTM
if(f.XTSM == j){//I keep thinking that getters are good
for(int k=0; k<=2;k++){//XST
if(f.XTS == k){//do the getters, really
for(int m=0;m<=3;m++){//XRX
if(f.XRX==m){//add funny comment about getters
for(int n=0;n<=7;n++){//XHAN
if(f.XHAN==n){//man, so good that is almost finished
count++;
}//end of if
}//end of XHAN
}//end of if
}//end of XRX
}//end of if
}//end ofXST
}//end of if
}//end of XSTM
//here you write the count and all the Foo somewhere
}
}}