Boa tarde,
Tenho um dataset que carrega o resultado de um SQL. Este SQL carrega diversas vezes uma mesma informação e o resto diferente. Tem como fazer um distinct em um dataset?
Boa tarde,
Tenho um dataset que carrega o resultado de um SQL. Este SQL carrega diversas vezes uma mesma informação e o resto diferente. Tem como fazer um distinct em um dataset?
Sim, normal. veja o exemplo a seguir:
function createDataset(fields, constraints, sortFields) {
var newDataset = DatasetBuilder.newDataset();
var minhaQuery = "select distinct" +
" fdn_usertenant.USER_CODE," +
" fdn_usertenant.USER_ID," +
" fdn_usertenant.login," +
" fdn_userdata.DATA_VALUE" +
" from" +
" fdn_usertenant, fdn_userdata" +
" where" +
" fdn_userdata.USER_TENANT_ID = fdn_usertenant.USER_ID and" +
" fdn_userdata.DATA_KEY = 'aprovador'";
//log.warn("QUERY: " + minhaQuery);
//log.warn(">>>>>>>>>>>>>>>>>>>>>>>>PASSO 01");
var dataSource = "/jdbc/FluigDS";
var ic = new javax.naming.InitialContext();
//log.warn(">>>>>>>>>>>>>>>>>>>>>>>>PASSO 02");
//log.warn("ic: " + ic);
var ds = ic.lookup(dataSource);
//log.warn(">>>>>>>>>>>>>>>>>>>>>>>>PASSO 03");
//log.warn("ds: " + ds);
var created = false;
//log.warn(">>>>>>>>>>>>>>>>>>>>>>>>>>>aaaPASSO 04");
try {
var conn = ds.getConnection();
//log.warn("conn: " + conn);
var stmt = conn.createStatement();
//log.warn("stmt: " + stmt);
var rs = stmt.executeQuery(minhaQuery);
var columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
if (!created) {
for (var i = 1; i <= columnCount; i++) {
newDataset.addColumn(rs.getMetaData().getColumnName(i));
}
created = true;
}
var Arr = new Array();
for (var i = 1; i <= columnCount; i++) {
var obj = rs.getObject(rs.getMetaData().getColumnName(i));
if (null != obj) {
Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString();
//log.warn(rs.getObject(rs.getMetaData().getColumnName(i)).toString());
} else {
Arr[i - 1] = "null";
}
}
newDataset.addRow(Arr);
}
} catch (e) {
//log.error("DATASET_SQL_ERRO==============> " + e.message);
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
return newDataset;
}
Bom dia Roberto,
Mas neste caso ali o SQL já esta com o distinct, no caso eu tenho o SQL retornando vários registros e gostaria de fazer o distinct somente no retorno do dataset, é possível?
— Daivid Junior Thomaz 25 de Jul de 2017Neste caso, antes de fazer o add, vc teria que percorrer todos os campos do dataset, verificando se ja existe.
— Roberto Baselio Lopes 25 de Jul de 2017Quanto a performance, você já verificou como fica?
— Daivid Junior Thomaz 25 de Jul de 2017Se houver muito registros, vai degradar. Não seria melhor tratar isso direto no select?
— Roberto Baselio Lopes 26 de Jul de 2017