我需要将行号限制为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代码中选择第一行,因为我对有多个地址的人有问题,它为它们放了两行,而我只需要有多个地址的人的第一行数据。
答案 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条款。