Tengo un poco de SQL que casi hace lo que quiero que haga. Estoy trabajando con tres tablas, Usuarios, Números de teléfono de usuario y Tipos de número de teléfono de usuario. Estoy tratando de obtener una lista de usuarios con sus números de teléfono para una exportación.¿Cómo limito una UNIÓN IZQUIERDA al primer resultado en SQL Server?
La base de datos en sí es antiguo y tiene algunos problemas de integridad. Mi problema es que solo debería haber 1 tipo de cada número de teléfono en la base de datos, pero ese no es el caso. Cuando ejecuto esto obtengo resultados de varias líneas para cada persona si contienen, por ejemplo, dos números de "Inicio".
¿Cómo puedo modificar el SQL para tomar el primer número de teléfono que aparece e ignorar el resto de números? Estoy en SQL Server y sé sobre la declaración TOP. Pero si agrego 'TOP 1' a la declaración de selección LEFT JOIN es simplemente que me da la primera entrada en la base de datos, no la primera entrada para cada usuario.
Esto es para SQL Server 2000.
Gracias,
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
Depende de qué versión de SQL estás hablando. Si se trata de SQL Server 2005+, tiene muchas opciones, incluidas las consultas de RANK. –
SQL Server es la versión 2000. – Justin808
La solución es [aquí] [1], simplemente reemplace join por left join. [1]: http://stackoverflow.com/questions/2043259/sql-server-how-to-join-to-first-row – qub1n