如何将行号限制为SQL查询中的一个唯一行?

时间:2012-08-30 15:18:02

标签: sql sql-server

我需要将行号限制为SQL查询中的一个唯一行。这是用于识别我所说的内容的示例数据:

john doe 3000 fog horn drive , ky 40444
john doe 3001 merry lane , ky 40484

我想在列表中返回第一个是我的查询:

Select 
    DISTINCT p.personID, e.citizenship, 
    rtrim(i.lastname + CASE WHEN i.suffix IS NULL THEN '' ELSE ' ' + i.suffix END) + ', ' + i.firstname + (CASE WHEN i.middlename IS NULL THEN '' ELSE ' ' + i.middlename END) StuName, 
    e.grade, i.gender, p.studentNumber, e.citizenship, e.adult, i.birthdate, 
    e.disability1, e.disability2, ad.city, e.displacedHomemaker, e.homeSchooled, 
    e.localStudentNumber, e.migrant, e.modifiedDate, e.modifiedByID,
    rtrim(Staff.lastname + CASE WHEN Staff.suffix IS NULL THEN '' ELSE ' ' + Staff.suffix END) + ', ' + Staff.firstname + (CASE WHEN Staff.middlename IS NULL THEN '' ELSE ' ' + Staff.middleName END) Staffname, 
    Staff.personID Staffid, i.lastname, i.firstname, i.middlename, i.ssn, 
    ad.phone, ad.state, ad.zip, ad.addressLine1
FROM 
    Person p 
LEFT join 
    Enrollment e ON e.personID = p.personID And isnull(e.noshow, 0) = 0 
LEFT join 
    EnrollmentKY ky ON ky.enrollmentID = e.enrollmentID 
LEFT join 
    [Identity] i ON i.identityID = p.currentIdentityID And i.personID = p.personID 
INNER join 
    Calendar c ON c.calendarID = e.calendarID 
INNER join 
    SchoolYear sy ON sy.endYear = c.endYear AND sy.active = 1 
JOIN 
    staffMember Staff ON Staff.personID = e.modifiedByID 
--join view_students s ON  s.personID = i.personID
left join 
    v_MailingAddress ad ON ad.personID = i.personID And ad.relatedBy = 'household'
                        And ad.endDate IS NULL And isnull(ad.secondary, 0) = 0 
order by 
    i.lastname, i.firstname, i.middlename

编辑:只需要在SQL代码中选择第一行,因为我对有多个地址的人有问题,它为它们放了两行,而我只需要有多个地址的人的第一行数据。

4 个答案:

答案 0 :(得分:1)

尝试使用LIMIT来限制号码。输出。

例如:

SELECT COLUMN_NAME
FROM TABLE
ORDER BY CONDITION
LIMIT NO_OF_ROWS;

答案 1 :(得分:1)

您是否尝试过使用“GROUP BY”子句代替DISTINCT关键字?

另外,子查询呢?如果我正在写这种类型的东西,我会使用一个sproc并创建一个临时表。

答案 2 :(得分:1)

如果personId对于每条记录都是不同的,并且它们只有不同的地址,那么您可以为row_number()添加一个字段,然后只选择{{1}的记录}:

row_number = 1

答案 3 :(得分:-1)

编辑:删除原始答案,因为问题已更改,原始答案不是改变问题的方法。

根据Neil Hoskins建议GROUP BY条款。