如何在1个字段中使用Distinct
或Group by
语句,其中SELECT
为全部或至少有几个?
示例:使用SQL SERVER!
SELECT id_product,
description_fr,
DiffMAtrice,
id_mark,
id_type,
NbDiffMatrice,
nom_fr,
nouveaute
From C_Product_Tempo
我希望Distinct
或Group 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
这很有效!
答案 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_product
每nom_fr
个SELECT * FROM C_Product_Tempo WHERE id_product IN (
SELECT MIN(id_product) FROM C_Product_Tempo GROUP BY nom_fr
);
,并获取相应的行;
{{1}}