我有一組數據,需要爲每個CON/OWNER/METHOD/MATRIX集合提取一條記錄。如果有一個非空RESULT,我想要那個。否則,我想要COUNT最高的那個。我如何查詢?SQL Server查詢從每個子組中選擇1
CON OWNER METHOD MATRIX RESULT COUNT
*CON_1 OWNER_1 METHOD_A SOLID NULL 503
CON_1 OWNER_1 METHOD_A SOLID NULL 1
*CON_1 OWNER_1 METHOD_A SOIL NULL 1305
CON_1 OWNER_1 METHOD_A SOIL NULL 699
*CON_2 OWNER_2 METHOD_B SOLID 290 687
CON_2 OWNER_2 METHOD_B SOLID NULL NULL
CON_2 OWNER_2 METHOD_B SOLID 450 600
CON_2 OWNER_2 METHOD_B WATER NULL 1
*CON_2 OWNER_2 METHOD_B WATER 400 NULL
對於結果,我想只是加星標的記錄,並且我正在顯示每個組是如何分組的。
這是糟糕的SQL:
select top (1) CON, OWNER, METHOD, MATRIX, RESULT, COUNT
from #TempTable
group by CON, OWNER, METHOD, MATRIX
order by CON, OWNER, METHOD, MATRIX, COUNT
...因爲我的計數不聚集函數的一部分。它也沒有處理RESULT是否爲NULL,並且top(1)不會從每個分組中返回1。但是,我沒有通過使用更復雜的查詢得到更遠(例如基於在How can I select multiple columns from a subquery (in SQL Server) that should have one record (select top 1) for each record in the main query?問題)
如何從每個分組中選擇一個?
很難選擇接受哪個,@siva,@Paul Creasey或@Andrew Lazarus。所有幫助。安德魯早期的格式很好,排序也很好; Siva的最後有T1.Ranking預選賽;保羅是第一個讓我去的。我對所有人都讚不絕口,既然保羅稍稍領先,我會接受。但都是值得的。 – thursdaysgeek 2011-06-07 23:55:04