我想运行一个根据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。我只想把它们还回去。
你有什么办法让我做到这一点吗?
发布于 2013-02-26 04:49:16
你想要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-26 05:15:14
DISTINCT应用于您选择的所有值,而不仅仅是某些列。在您的情况下,它将适用于所有: colA,colB,colC,colD。不可能选择所有列并使一些列不同,而另一些列则不同。要做到这一点,唯一的方法如戈登的例子所示,这是唯一有效的例子和答案。
发布于 2013-02-26 05:30:14
也许可以使用普通集合运算
with UNION和UNION ALL (参见http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm)
UNION colA和colB将消除这些列中重复的条目,而UNION ALL将保留colC和colD中的所有值
https://stackoverflow.com/questions/15075970
复制相似问题