У меня есть немного SQL, который почти делает то, что я хочу.Я работаю с тремя таблицами: Users, UserPhoneNumbers и UserPhoneNumberTypes.Я пытаюсь получить список пользователей с их номерами телефонов для экспорта.
Сама база данных старая и имеет некоторые проблемы с целостностью.Моя проблема в том, что в базе данных должен быть только один тип каждого номера телефона, но это не так.Когда я запускаю это, я получаю многострочные результаты для каждого человека, если они содержат, например, два «домашних» номера.
Как я могу изменить SQL, чтобы взять первый номер телефона в списке и игнорировать оставшиеся номера?Я нахожусь в SQL Server, и я знаю об утверждении TOP.Но если я добавлю 'TOP 1' к оператору выбора LEFT JOIN, он просто даст мне 1-ю запись в базе данных, а не 1-ую запись для каждого пользователя.
Это для SQL Server 2000.
Спасибо,
SELECT Users.UserID,
Users.FirstName, Users.LastName,
HomePhone, WorkPhone, FaxNumber
FROM Users
LEFT JOIN
(SELECT UserID, PhoneNumber AS HomePhone
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Home') AS tmpHomePhone
ON tmpHomePhone.UserID = Users.UserID
LEFT JOIN
(SELECT UserID, PhoneNumber AS WorkPhone
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Work') AS tmpWorkPhone
ON tmpWorkPhone.UserID = Users.UserID
LEFT JOIN
(SELECT UserID, PhoneNumber AS FaxNumber
FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
WHERE UserPhoneNumberTypes.PhoneNumberType='Fax') AS tmpFaxNumber
ON tmpFaxNumber.UserID = Users.UserID