Column aAktenId = dbBeteiligte.getColumn("aAktenId");
Column aFilter = dbBeteiligte.getColumn("aFilter");
SelectStatement st = sqlFactory.newSelectStatement();
st.setTable(dbBeteiligte);
SelectTableReference ref = st.getSelectTableReference();
VirtualColumn num = new VirtualColumn("NUM", Column.Type.INTEGER);
num.setValue("COUNT(*) OVER (PARTITION BY " + aAktenId.getName() + ")");
st.addResultColumn(num);
VirtualColumn minAName = new VirtualColumn("MINANAME", Column.Type.VARCHAR);
minAName.setValue("MIN(UPPER(" + aName.getName() + ")) OVER (PARTITION BY " +
aAktenId.getName() + ")");
st.addResultColumn(minAName);
VirtualColumn minAVorname = new VirtualColumn("MINAVORNAME", Column.Type.VARCHAR);
minAVorname.setValue("MIN(UPPER(NVL(" + aVorname.getName() +
", ' '))) OVER (PARTITION BY " +
aAktenId.getName() + ", UPPER(" + aName.getName() +
"))");
st.addResultColumn(minAVorname);
st.addResultColumn(ref.newColumnReference(aName));
st.addResultColumn(ref.newColumnReference(aVorname));
st.addResultColumn(ref.newColumnReference(aAktenId));
BooleanConstraint bc = st.getWhere().createEQ();
bc.addPart(st.getTableReference().newColumnReference(aFilter));
bc.addPart(pFilter);
Table t = st.createView((Table.Name) null);
SelectStatement st2 = sqlFactory.newSelectStatement();
st2.setTable(t);
SelectTableReference ref2 = st2.getSelectTableReference();
st2.addResultColumn(ref2.newColumnReference(t.getColumn("NUM")));
Column aName2 = t.getColumn(aName.getName());
st2.addResultColumn(ref2.newColumnReference(aName2));
Column aVorname2 = t.getColumn(aVorname.getName());
st2.addResultColumn(ref2.newColumnReference(aVorname2));
st2.addResultColumn(ref2.newColumnReference(t.getColumn(aAktenId.getName())));
bc = st2.getWhere().createEQ();
bc.addPart(ref2.newColumnReference(t.getColumn("MINAVORNAME")));
Function f = st2.createFunction("MIN");
Function f2 = st.createFunction("UPPER");
Function f3 = st.createFunction("NVL");
f3.addPart(ref2.newColumnReference(aVorname2));
f3.addPart(" ");
f2.addPart(f3);
bc.addPart(f);
bc = st2.getWhere().createEQ();
bc.addPart(ref2.newColumnReference(t.getColumn("MINANAME")));
f = st2.createFunction("MIN");
f2 = st.createFunction("UPPER");
f2.addPart(ref2.newColumnReference(aName2));
f.addPart(f2);
bc.addPart(f);
Table t2 = st2.createView(pTableAlias);
JoinReference result = pJoinReference.leftOuterJoin(t2);