2013-02-25 85 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