2011-12-22 46 views
-1

我有一個包含250列的表。我正在嘗試選擇所有列,但我想爲兩列使用DISTINCT。SQL:用於少數列的MS Access DISTINCT

我開始它的sometihing這樣的:

 
SELECT * 
FROM table_name 
WHERE EXISTS (SELECT DISTINCT table_name.column_name FROM table_name). 

但不起作用。 也許有人有什麼想法? 在此先感謝。

+1

「我有250列的表」 - 你認爲難你有作品能似乎是一個簡單的查詢可以歸因於設計缺陷? – onedaywhen 2011-12-22 08:36:16

回答

0
SELECT * 
FROM table_name t 
WHERE NOT EXISTS (SELECT 1 
        FROM table_name tt 
        WHERE tt.col1 = t.col1 
        AND tt.col2 = t.col2 
        AND tt.id > t.id) 
+0

我認爲你的查詢是有效的。但是我遇到了一個問題:例如在col2中有一些NULL記錄,而distinct對於NULL爲空的記錄不起作用。也許我必須將NULL替換爲零或類似的東西? – Juronis 2011-12-22 09:24:54

+0

用'(tt.col2 IS NULL AND t.col2 IS NULL)或(tt.col2 = t.col2)'替換'tt.col2 = t.col2'。 – DNNX 2011-12-22 09:32:01

+0

或者,您可以用'ISNULL(tt.col2,0)= ISNULL(t.col2,0)'替換'tt.col2 = t.col2'。或者你可以使用'COALESCE'而不是'ISNULL'。 – DNNX 2011-12-22 09:33:14

0

假設ID是表的主鍵,

SELECT * 
FROM table_name t 
WHERE NOT EXISTS (SELECT 1 FROM table_name WHERE col1 = t.col1 AND ID <> t.ID) 
    AND NOT EXISTS (SELECT 1 FROM table_name WHERE col2 = t.col2 AND ID <> t.ID) 
+0

我現在沒有ms訪問權限,但可以通過'group by'工作'select *'? – 2011-12-22 08:34:57

+0

謝謝指出。我修改了我的答案。 – Akhil 2011-12-22 08:41:10

+0

你在MS Access中測試過了嗎? 「SELECT」子句中的列沒有出現在「GROUP BY」子句中嗎? – onedaywhen 2011-12-22 08:41:53