2014-02-11 201 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重复,但如何与要提取其他列相匹配,我可以不要想象,因为有些行会从结果中删除。