8

colA と colB の値に基づいて重複行を排除するクエリを実行したいと考えています。ただし、colC と colD の値を返したいと思っています。

これは私がこれまでに持っているものの簡単な例です:

SELECT DISTINCT colA, colB   ?colC, colD?
FROM TABLE1

また

SELECT colA, colB    ?colC, colD?
FROM TABLE1
GROUP BY colA, colB

いずれの方法でも、colC と colD を返すことはできません。ただし、colA や colB などの個別の値またはグループとしてチェックしない限り、colC と colD を返すことはできません。私はこれをしたくありません.colCとcolDではなく、colAとcolBを一緒にする必要があります。返品したいだけです。

これを達成する方法についてのアイデアはありますか?

4

3 に答える 3

11

欲しいlist_aggですか?

select colA, colB,
       list_agg(distinct colC, ','),
       list_agg(distinct colD, ',')
from Table1
Group by ColA, ColB

ColC と colD に任意の値を使用する場合は、次を使用できますmin()

select colA, colB, min(colC), min(colD)
from Table1
Group by ColA, ColB
于 2013-02-25T20:49:16.397 に答える
2

DISTINCT は、一部の列だけでなく、選択しているすべての値に適用されます。あなたの場合、colA、colB、colC、colDのすべてに適用されます。すべての列を選択して、いくつかを明確にし、いくつかを明確にすることは不可能です。ゴードンの例に示されているこれを行う唯一の方法は、これが唯一の有効な例と答えです。

于 2013-02-25T21:15:14.417 に答える
0

単純な集合操作を使うかもしれません

UNION および UNION ALL を使用 ( http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htmを参照)

UNION colA と colB はこれらの列の重複したエントリを削除しますが、UNION ALL は colC と colD のすべての値を保持します。

于 2013-02-25T21:30:14.147 に答える