Group by或Distinct - 但是有几个领域

时间:2014-02-11 19:10:58

标签: sql sql-server group-by distinct

如何在1个字段中使用DistinctGroup by语句,其中SELECT为全部或至少有几个?

示例:使用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()over(按[nom_fr]分区按id_mark分区)               ,id_product,description_fr,DiffMAtrice,id_mark,id_type,NbDiffMatrice,nom_fr,nouveaute        来自C_Product_Tempo        )d 其中rn = 1

这很有效!

3 个答案:

答案 0 :(得分:0)

您需要决定如何处理其他字段。例如,对于数字字段,您想要总和吗?平均?马克斯?民?对于非数字字段,如果有多个具有相同nom_fr的值,则需要特定记录中的值?

某些SQL系统允许您在执行GROUP BY时获取“随机”记录,但SQL Server不会 - 您必须为不在GROUP BY中的列定义正确的聚合。

答案 1 :(得分:0)

GROUP BY用于与聚合函数一起分组(请参阅http://www.w3schools.com/sql/sql_groupby.asp),因此在不计算,求和等情况下不使用分组。DISTINCT会重复,但会如何匹配对于你想要提取的其他列,我无法想象,因为某些行将从结果中删除。

答案 2 :(得分:0)

如果我正确理解你,你只需要每nom_fr行第一行。如果是这样,您只需使用子查询即可获得id_productnom_frSELECT * FROM C_Product_Tempo WHERE id_product IN ( SELECT MIN(id_product) FROM C_Product_Tempo GROUP BY nom_fr ); ,并获取相应的行;

{{1}}

An SQLfiddle to test with