-4

一意の識別子に基づいて、結果セットから重複する値を削除する必要があります。

結果セットから重複を削除する必要があります。

  while(resultSet.next())
  {     
   int seqNo = resultSet.getInt("SEQUENCE_NO");

   String tableName = resultSet.getString("TABLE_NAME");

   String columnName = resultSet.getString("COLUMN_NAME");

  String filter = resultSet.getString("FILTER");

 }

上記の繰り返しから、結果セットから2行を取得しています。同じシーケンス番号、同じテーブル名、異なる列名、同じフィルターがあります。

1 PRODUCTFEES CHARGETYPE PRODUCTID

1 PRODUCTFEES PRODUCTCODE PRODUCTID

私の要件は、重複するテーブル名、重複するシーケンス番号、重複するフィルターを削除することです。

以下の出力を取得したいのですが、

1 PRODUCTFEES CHARGETYPE PRODUCTCODE PRODUCTID
4

2 に答える 2

0

提供する例では、各列のすべての個別の値を個別に出力したいようです(テーブルには4つの列がありますが、5つの値を出力します)。

質問にタグが付けられているjavaので、あなたが取ることができるアプローチはSet、重複が通過しないように、各列にの実装を使用することです。次に、各のすべての要素を出力しますSet

LinkedHashSet[] sets = new LinkedHashSet[]{
    new LinkedHashSet(), 
    new LinkedHashSet(),
    new LinkedHashSet(),
    new LinkedHashSet() };

while(resultSet.next()) {     
    sets[0].add(resultSet.getInt("SEQUENCE_NO"));
    sets[1].add(resultSet.getString("TABLE_NAME")););
    sets[2].add(resultSet.getString("COLUMN_NAME"));
    sets[3].add(resultSet.getString("FILTER"));
}

StringBuilder buf = new StringBuilder();
for (LinkedHashSet set : sets) {
    // append to buf all elements of each set
}

ただし、まったく同じSQLクエリからこれに対処し、SELECT DISTINCT columnX各列を作成して、それ以上操作せずに結果を出力する方が簡単な場合があります。または、すべての個別の値を連結する集計関数を使用します。実装は、使用しているDBMSに大きく依存します(GROUP_CONCATMySQLの場合LISTAGG、Oracleの場合など)。これは、Oracleの場合と同様の質問になります。OracleのLISTAGG関数を一意のフィルターで使用するにはどうすればよいですか。

于 2013-02-01T11:11:09.127 に答える
0

Based on the different outputs I'd say, that you not just need to remove duplicates, but also reorder the data from the duplicates.

In that case you need to fill a new data-array (or similar structure) in the while(resultSet.next()), and after that loop over the newly arranged data-object and output accordingly.

In Meta-Lang this would be as follows:

while resultset.next()
    if newdata-array has unique key
        add column-name to found entry in newdata-array
    else
        create new entry in newdata-array with column-name

while newdata-array.next()
    output seq, table-name
    while entry.column-names.next()
        output column-name
    output product-id
于 2013-02-01T11:17:24.470 に答える