2014-02-11 192 views
-2

如何在一個字段上使用DistinctGroup by聲明,或者使用SELECT聲明全部或至少幾個?Group by或Distinct - 但有幾個字段

示例:使用SQL SERVER!

SELECT id_product, 
    description_fr, 
    DiffMAtrice, 
    id_mark, 
    id_type, 
    NbDiffMatrice, 
    nom_fr, 
    nouveaute 
From C_Product_Tempo 

我想DistinctGroup By nom_fr

剛剛得到解答: 選擇id_product,description_fr,DiffMAtrice,id_mark,ID_TYPE,NbDiffMatrice,nom_fr,從nouveaute ( SELECT RN = ROW_NUMBER()超過(由[nom_fr]通過id_mark順序分區) ,id_product,description_fr,DiffMAtrice,id_mark,ID_TYPE,NbDiffMatrice,nom_fr,nouveaute 從C_Product_Tempo )d 其中RN = 1

而且這個工作非常完美!

+0

你能提供幾行數據,你想在最終結果中達到什麼目的? – HKImpact

回答

0

如果我正確地理解了你,你只需要按照nom_fr的第一行。如果是這樣,你可以簡單地使用子查詢來得到最低id_product每0123',並獲得相應的行;

SELECT * FROM C_Product_Tempo WHERE id_product IN (
    SELECT MIN(id_product) FROM C_Product_Tempo GROUP BY nom_fr 
); 

An SQLfiddle to test with

+1

感謝Joachim Isaksson。你理解正確,而且正是我所需要的。非常感謝。 – Philippe

0

您需要決定如何處理其他字段。例如,對於數字字段,你想要一個總和嗎?平均?馬克斯?民?對於非數字字段,如果存在多個具有相同nom_fr的特定記錄的值,那麼您需要這些值?

某些SQL系統允許您在執行GROUP BY時獲取「隨機」記錄,但SQL Server不會 - 您必須爲不在GROUP BY中的列定義適當的聚合。

0

GROUP BY用於組連同聚合函數(見http://www.w3schools.com/sql/sql_groupby.asp),所以它是沒有用的計數分組,總結等DISTINCT eleminates重複,但如何與要提取其他列相匹配,我可以不要想象,因爲有些行會從結果中刪除。