2013-02-25 81 views
4

我想根据colA和colB的值运行消除重复行的查询。 但是,我仍然想要返回colC和colD的值。选择截然不同的列值

这里是什么,我至今一个简单的例子:

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

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

两种方法都不允许我回去COLC,和冷除非我检查他们的独特价值或者像colA和colB这样的组合。我不想这样做,只有colA和colB需要不同,而不是colC和colD。我只想回报他们。

关于我如何完成此任何想法?

+4

假设'table1'中有多行,其中有'colA'和'colB'的一组特定值,您希望返回哪一组'colC'和'colD'值?最小值?最大值? “第一”或“最后”值(在这种情况下,您需要告诉我们如何排序数据以使“第一”和“最后”有意义)? – 2013-02-25 20:36:41

+2

你能张贴一些样本数据和期望的结果吗? – Taryn 2013-02-25 20:39:52

+0

@JustinCave你可以详细说明我将如何使用“第一”和“最后”?我相信我会永远想要第一个价值。这与我的例子看起来如何? – Baxter 2013-02-25 20:55:02

回答

5

你想list_agg

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

如果任意值将为COLC和冷做,你可以使用min()

select colA, colB, min(colC), min(colD) 
from Table1 
Group by ColA, ColB 
+0

我认为在这种情况下,任何价值都适用于我。我会试试我不想分组的那些专栏。 – Baxter 2013-02-25 21:09:43

+0

解决方案效果很好,谢谢。 – Baxter 2013-02-25 21:22:48

1

的DISTINCT适用于您选择,而不仅仅是一些列的所有值。在你的情况下,它将适用于所有:colA,colB,colC,colD。不可能选择所有的列,并做出一些独特的,而不是一些。 Gordon举例说明了唯一可行的方法,这是唯一有效的例子和答案。

+0

我同意。我尝试使用min来表示我不关心是唯一的还是有序的列。 – Baxter 2013-02-25 21:22:19