Office中国论坛/Access中国论坛

标题: 不重复记录的统计 [打印本页]

作者: leonard123    时间: 2006-8-4 00:18
标题: 不重复记录的统计
请问怎么统计表里不重复的记录数呀
作者: andymark    时间: 2006-8-4 00:28
DISTINCT
作者: leonard123    时间: 2006-8-4 05:21
谢谢版主,但是我还是不会用这个,能说明一下吗?我只想统计不重复的记录数量。
作者: andymark    时间: 2006-8-4 05:26
ALL、DISTINCT、DISTINCTROW、TOP 谓词


指定使用 [url=mkMSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\2052\acmain11.chm::/html/jetglossary.htm#idh_dadefsqlstatement]SQL[/url] 查询选择的记录。


语法


SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM table


一个包含这些谓词的 SELECT 语句具有以下部分:











部分


说明





ALL


作为不包括谓词处理。[url=mkMSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\2052\acmain11.chm::/html/jetglossary.htm#idh_dadefmsjetdatabaseengine]Microsoft Jet 数据库引擎[/url]会选择符合[url=mkMSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\2052\acmain11.chm::/html/jetglossary.htm#idh_dadefsqlstatement] SQL 语句[/url]中的条件的所有记录。以下两个示例是等价的,它们都返回 Employees 表中的所有记录:


  1. SELECT ALL *
    FROM Employees
    ORDER BY EmployeeID;
复制代码


  1. SELECT *
    FROM Employees
    ORDER BY EmployeeID;
复制代码





DISTINCT


忽略在选定字段中包含重复数据的记录。若要包括在查询的结果中,在 SELECT 语句中所列出的每个字段的值必须是唯一的。例如,Employees 表中列出的一些雇员可能有相同的名字 (LastName)。如果在 LastName 字段中有两个包含 Smith 的记录,则下面的 SQL 语句只返回一个包含 Smith 的记录:


  1. SELECT DISTINCT
    LastName
    FROM Employees;
复制代码


如果忽略了 DISTINCT,这个查询将返回两个 Smith 记录。


如果 SELECT 子句包含多个字段,若要在结果中包含给定的记录,那么所有字段的值的组合必须是唯一的。


使用 DISTINCT 查询的输出结果是不可更新的,它不会影响其他用户所做的后续更改。





DISTINCTROW


忽略整个重复记录的数据,而不仅仅是重复的字段。例如,创建一个联接顾客表和订单表的 CustomerID 字段的查询。顾客表不包含重复的 CustomerID 字段,但是订单表包含重复的 CustomerID 字段,因为每一个顾客可以有多个订单。下面的 SQL 语句显示了如何使用 DISTINCTROW 产生一个至少有一个订单但没有这些订单任何细节的公司列表:


  1. SELECT DISTINCTROW CompanyName
    FROM Customers INNER JOIN Orders
    ON Customers.CustomerID = Orders.CustomerID
    ORDER BY CompanyName;
复制代码


如果忽略了 DISTINCTROW,对于每个有多个订单的公司这个查询语句将得到多个行。


DISTINCTROW 仅在选择的字段源于查询中所使用的表的一部分而不是全部时才会生效。如果查询仅包含一个表或者要从所有的表中输出字段,DISTINCTROW 就会被忽略。





TOP n [PERCENT]


返回出现在由 ORDER BY 子句指定的起始和结束范围内的一定数量的记录。假定希望得到 1994 年级中前 25 名学生的名字:


  1. SELECT TOP 25
    FirstName, LastName
    FROM Students
    WHERE GraduationYear = 1994
    ORDER BY GradePointAverage DESC;
复制代码


如果没有包含 ORDER BY 子句,查询将会从 Students 表中返回一个满足 WHERE 子句的包含 25 个记录的任意集合。


TOP 谓词不会在两个相等的值中进行选择。在上面的示例中,如果第 25 和第 26 名的年级平均分相同,那么查询将会返回 26 个记录。


也可以使用 PERCENT 保留字返回出现在 ORDER BY 子句指定的起始和结束范围内的某个百分比数量的记录。假如,您希望返回该年级中最后名次的百分之十个学生,而不是前 25 名学生:


  1. SELECT TOP 10 PERCENT
    FirstName, LastName
    FROM Students
    WHERE GraduationYear = 1994
    ORDER BY GradePointAverage ASC;
复制代码


ASC 谓词指定返回最小值。TOP 之后的值必须是一个无符号整数


TOP 谓词不影响查询是否可更新。





table


从中检索记录的表名。
作者: fan0217    时间: 2006-8-4 05:29
理解谓词,像中文中的谓语一样,位于主语后面。DISTINCT是很有用的应该关键词。






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3