У меня есть немного SQL, который почти делает то, что я хочу, чтобы он делал. Я работаю с тремя таблицами, пользователями, UserPhoneNumbers и UserPhoneNumberTypes. Я пытаюсь получить список пользователей с их номерами телефонов для экспорта.
Сама база данных устарела и имеет некоторые проблемы с целостностью. Моя проблема заключается в том, что в базе данных должно быть только 1 тип каждого номера телефона, но это не так. Когда я запускаю это, я получаю многострочные результаты для каждого человека, если они содержат, например, два "домашних" номера.
Как я могу изменить 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