Esto está relacionado con esta pregunta: https://dba.stackexchange.com/questions/103262/joining-multiple-tables-results-in-duplicate-rows/103264
Tengo dos tablas que estoy uniendo. Comparten una clave. La tabla persona tiene un nombre por clave primaria pero la tabla email tiene múltiples emails por personId. Quiero mostrar sólo el primer correo electrónico por persona. Actualmente obtengo varias filas por persona porque tienen varios correos electrónicos. Estoy ejecutando SQL-Server 2005.
EDIT: Esto es T-SQL. Primer correo electrónico es, literalmente, la primera fila de correo electrónico por persona.
EDITAR 2: Primer correo electrónico como yo lo veo sería la primera fila de correo electrónico que aparece en la unión como SQL trabaja a través de la consulta. No importa que email aparezca. Sólo que no aparezca más de un correo electrónico. Espero que quede más claro.
Table1: Person
Table2: Email
Select Person.PersonName, Email.Email
From person
left join on Person.ID=Email.PersonId;
SELECT
A.PersonName, A.Email
FROM
(
Select Person.PersonName, Email.Email
,ROW_NUMBER() OVER(PARTITION BY Person.ID ORDER BY Email.Email) AS RN
From person
left join Email on Person.ID=Email.PersonId
) A
WHERE A.RN = 1
Yo utilizaría un aplique exterior para esto, me parece más legible.
Select Person.PersonName, coalesce(Email.Email,'No email found.') as Email
From person
outer apply (
select top(1) Email.Email
from Email
where Person.ID=Email.PersonId
order by <whatever suits you>
) as Email;