Dataset com distinct

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?

Neste caso, antes de fazer o add, vc teria que percorrer todos os campos do dataset, verificando se ja existe.

Quanto a performance, você já verificou como fica?

Se houver muito registros, vai degradar. Não seria melhor tratar isso direto no select?