2013-04-12 24 views
1

我有數據,看起來像這樣如何在Access SQL中只符合每個符合條件的行?

CUSTID  POLICY  TYPE RANDOMTHING ETC 

而且有時會出現每CUSTID乘行,與否則其餘字段不同的值。我只想每個CUSTID返回一行,只取第一行的值(忽略其餘行)。

我試過先申請CUSTID,但它似乎沒有工作。

+0

您是否嘗試過使用「TOP 1」謂詞作爲查詢的一部分? (我假設你正在編寫一個SQL語句)。 –

+0

我該如何做一個「TOP 1」?是的,我可以編輯SQL語句 –

+0

谷歌搜索它,我不認爲這是我所需要的。它只返回我的數據集的最上面一行。我需要每個CUSTID的「頂級」行(實際上,我的CUSTID就像第二個域) –

回答

1

我相信你想要的東西,像

SELECT t1.* 
FROM yourTable t1 INNER JOIN 
    (
     SELECT CUSTID, MIN(POLICY) AS MinOfPOLICY 
     FROM yourTable 
     GROUP BY CUSTID 
    ) t2 ON t1.CUSTID = t2.CUSTID AND t1.POLICY = t2.MinOfPOLICY 
ORDER BY 1 

在這個例子中,t1t2是表別名。在大多數情況下,當構建一個不止一次引用同一個表的查詢時,需要使用表別名來消除列引用的歧義。例如,您不能只說0123',因爲您不清楚yourTable的第一個實例是CUSTID,還是來自第二個實例。

SQL語言允許通過將別名直接放在表名後面給別名表,所以yourTable t1表示「yourTable,使用別名t1」。另一個別名t2GROUP BY子查詢(括號內的那個)的別名。

+1

看起來像一個很好的猜測給我。 :-)如果這不是他所追求的,他應該向我們展示樣本數據和他希望從樣本中得到的輸出。 – HansUp

+0

@HansUp [TYPE]是隱式排序的唯一可能的候選人。排序RANDOMTHING看起來不會是最好的選擇.... :) –

+0

我不明白這裏的t1和t2是什麼?或者如何解析「yourTable t1」。假設我的查詢名稱是MyQuery –