2010-04-29 105 views
1

我確定這對於t-sql專家來說非常簡單。在查詢中獲取唯一結果

,我有以下結果從表

idMain IdSecondary TextValue 
1  1   text1 
1  2   text2 
2  5   text3 
2  6   text5 

而且我想只獲得idMain第一次出現。

結果應該是這樣的。

idMain idSecondary TextValue 
1  1   text1 
2  5   text3 

我該如何做到這一點?

+0

在這裏找到了一個類似的案例http://stackoverflow.com/questions/715804/query-to-return-1-instance-of-a-record-with-duplicates,它竟然像一個魅力工作。感謝您的答案! – Bathan 2010-04-29 20:01:32

+0

請注意,如果您對同一個'idMain'有不同的'TextValue',那麼接受的答案建議的解決方案可能不適用於您,如示例中所示。請注意該帖子之間的區別,即相同的「ID」始終具有相同的「值」。 – 2010-04-29 20:04:28

回答

0

您應該可以加入子查詢,如下例所示。這是假設由「第一」你的意思是最低idSecondary

SELECT t.idMain, sub_t.minSecondary, t.textValue 
FROM your_table t 
JOIN (SELECT idMain, MIN(idSecondary) minSecondary 
     FROM  your_table 
     GROUP BY idMain) sub_t ON (sub_t.idMain = t.idMain); 
0

取決於你的意思是「第一」。通常這個詞意味着datetime或時鐘排序,但你的表沒有一個日期或在它時間字段...

所以,你必須清楚你所說的「第一」

的意思如果你有沒有存儲在表中的某些值可以告訴查詢處理器如何訂購任意兩條記錄以區分「先」與「是」之間的任何意思,然後您就失去了運氣......

假設你確實有這樣一個領域(爲了舉例,假設它是IdSecondary--因爲你的樣本結果看起來就是這種情況),那麼你需要做的是

Select * From Table a 
Where IdSecondary= (Select Min(IdSecondary) 
        From Table 
        Where idMain = a.idMain)