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 之类的组。我不想这样做,只有 colA 和 colB 需要区分,而不是 colC 和 colD。我只想退货。

关于我如何做到这一点的任何想法?

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。不可能选择所有列并使一些不同而另一些不同。Gordon 的示例中显示了这样做的唯一方法,这是唯一有效的示例和答案。

于 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 回答