2012-05-13 69 views
3

我遇到了SQL查詢的問題。我有一個145個網站名稱的列表。在每個地點找到某些物種。我已經創建了每個網站上每種物種被發現數量的計數。我想找到在每個站點看到的5種最常見的物種。目前我有:按字段分組的SQL TOP結果

SELECT TOP 5 Count([bird point counts bound query].[Group size]) AS [CountOfGroup size], [bird point counts bound query].site, [bird point counts bound query].Species 
FROM [bird point counts bound query] 
GROUP BY [bird point counts bound query].site, [bird point counts bound query].Species 
ORDER BY Count([bird point counts bound query].[Group size]) DESC; 

這只是返回從所有站點的5個最常見的種類。爲了澄清,每個站點和145個站點的前5名結果,結果表應該保存725條記錄。我目前在Access工作。

任何幫助讚賞,因爲SQL不是我的強項。

+0

「限制」,而不是「頂」或許 – keyser

+0

哦,唉,要解決這個正確的方法是用Windows函數,而這些都在Access支持。你可以改變更多功能數據庫的任何改變,比如SQL Server?或者,您可以在應用程序級別執行此操作。 –

+0

ms-access sql有'交叉應用'嗎? – Phil

回答

0

只要我能解決問題,你只能通過Access中的臨時表來完成這項工作。

沿着這些線?

CREATE TABLE ##SiteSpecies (
    id   int IDENTITY (1,1), 
    Site   <whatever>, 
    Species  <whatever>, 
    Observations int 
) 

INSERT INTO ##SiteSpecies 
SELECT [bird point counts bound query].site, [bird point counts bound query].Species, Count([bird point counts bound query].[Group size]) 
FROM  [bird point counts bound query] 
GROUP BY [bird point counts bound query].site, [bird point counts bound query].Species 
ORDER BY [bird point counts bound query].site, [bird point counts bound query].Species, Count([bird point counts bound query].[Group size]) 

SELECT 
    results.* 
FROM 
    ##SiteSpecies  AS results 
INNER JOIN 
(
    SELECT Site, MIN(id) AS FirstID FROM ##SiteSpecies GROUP BY Site 
) 
    AS SiteMarkers 
    ON results.Site = SiteMarkers.Site 
    AND results.id <= SiteMarkers.FirstID + 4 
+1

您是否可以在任何版本的MS Access中工作?當爲這些字段使用合適的數據類型時,CREATE TABLE ## SiteSpecies會在Access 2007中引發語法錯誤。如果包含數據庫引擎將接受該名稱... [## SiteSpecies] ...但它並不真正產生一張臨時表。該表不會比在數據庫中創建的任何其他表更臨時。 – HansUp

+0

首先,INSERT語句應該是「INSERT INTO ## SiteSpecies(Site,Species,Observations)」。至於訪問錯誤,只要您在完成時刪除它,就可以調用表中的任何內容。 –