2012-05-07 20 views
1

選擇有限的結果我試過檢查了這個問題sql - distinct + select,似乎無法正確地根據我的情況對其進行量身定製。我也不在sql dev團隊中,所以我不知道數據庫的所有內容。我在測試DB上在黑暗中拍攝。這裏是我當前查詢的僞樣本:根據列

select a.name, b.col1, 
from name a, amount b 
where a.identifier=b.acctid 
and b.col1 != 'test' 

什麼是目前按查詢舉例:

a.name | b.col1 
Jeff  1 
Jeff  333 
Jeff  77 
Jeff  1 
Jeff  14 
Bob  22 
Bob  4 
Bob  5 
Bob  6 

而且我想在查詢結果返回的前n(一我選擇的數字)基於ColA的獨特結果。例如,如果n爲2:

a.name | b.col1 
Jeff  1 
Jeff  333 
Bob  22 
Bob  4 
+0

你想要每個ColA的前兩名?你將用來訂購這個專欄的名稱是什麼?請使您的僞查詢和結果列具有相同的列名稱。 –

+0

對不起,我忘了更新結果集以匹配查詢,完成。 – whitewolfpgh

+0

您使用SQL Server 2005或更高版本嗎? –

回答

3

對於SQL Server 2005 +,你可以使用分析功能:

DECLARE @n INT 
SET @n = 2 

;WITH CTE AS 
( SELECT a.name, b.col1, b.col2, ROW_NUMBER() OVER(PARTITION BY ColA ORDER BY a.identifier) Corr 
    FROM name a 
    INNER JOIN amount b 
    ON a.identifier = b.acctid 
    WHERE b.col2 != 'test' 
) 
SELECT * 
FROM CTE 
WHERE Corr <= @n 

我也改變了你的查詢使用顯式連接。

+0

@TimLehner - Yeap,就是這樣。我現在改變了,謝謝 – Lamak

+0

,它不喜歡聲明和設置顯然。拋出錯誤:ORA-06550:第1行,第9列: PLS-00103:遇到以下其中一項時遇到符號「@」: – whitewolfpgh

+1

@whitewolfpgh --'ORA-06550' ?,因此您使用的是Oracle而不是SQL服務器如你的問題所述?在任何情況下,該部分只是爲了明確你的問題的'n',你可以過濾沒有這個部分的查詢,並通過你想要的數字來改變'@ n' – Lamak

1

步驟1:

與信息和另一列有用於每個可樂類的自動增量值創建一個臨時表。

第2步:

選擇的所有信息,其中新列< N值