transponer traer solo repetir repetidos registros mostrar filas eliminar duplicados dejando convertir consulta columnas agrupar sql sql-server tsql

sql - traer - cómo seleccionar filas basadas en valores distintos de A solo COLUMNA



sql transponer columnas a filas (5)

Necesito consultar una tabla para devolver las filas, pero no puedo consultar la tabla correctamente. Aquí está mi vista de tabla:

Id MailId EmailAddress Name 1 1 [email protected] Mr. A 2 1 [email protected] Mr. B 3 1 [email protected] Mr. C 4 1 [email protected] Mr. D 5 1 [email protected] Mr. A 6 2 [email protected] Mr. E 7 2 [email protected] Mr. A 8 3 [email protected] Mr. F 9 4 [email protected] Mr. D 10 5 [email protected] Mr. F 11 6 [email protected] Mr. D

El conjunto de resultados debe regresar:

Id MailId EmailAddress Name 1 1 [email protected] Mr. A 2 1 [email protected] Mr. B 3 1 [email protected] Mr. C 4 1 [email protected] Mr. D 6 2 [email protected] Mr. E 8 3 [email protected] Mr. F

En otras palabras: primero, deseo seleccionar distintas direcciones de correo electrónico y luego devolver las filas que contienen distintas direcciones de correo electrónico.

Nota: Solo usar la palabra clave "Distinct" no funcionará aquí, ya que seleccionará distintas filas. Mi requisito es seleccionar distintas direcciones de correo electrónico y luego seleccionar las filas que contienen esas direcciones.

Editar: No puedo usar la palabra clave "Agrupar por" tampoco, porque para esto también tendré que agruparme con Id (que es el PK) y al hacerlo devolveré dos filas con los mismos valores de EmailAddress pero con diferentes Id.


En cuanto a su resultado, quizás la siguiente consulta pueda funcionar, pruébelo:

SELECT * FROM tablename WHERE id IN (SELECT MIN(id) FROM tablename GROUP BY EmailAddress)

Esto seleccionará solo una fila para cada dirección de correo electrónico distinta, la fila con la id mínima que es lo que su resultado parece retratar


Intente esto: necesita un CTE (Common Table Expression) que divida (agrupe) sus datos por una dirección de correo electrónico distinta y clasifique cada grupo por ID, el más pequeño primero. Luego, simplemente selecciona la primera entrada para cada grupo, eso debería darte lo que estás buscando:

;WITH DistinctMails AS ( SELECT ID, MailID, EMailAddress, NAME, ROW_NUMBER() OVER(PARTITION BY EMailAddress ORDER BY ID) AS ''RowNum'' FROM dbo.YourMailTable ) SELECT * FROM DistinctMails WHERE RowNum = 1

Esto funciona en SQL Server 2005 y posteriores (no mencionó qué versión está usando ...)


si no quieres usar DISTINCT use GROUP BY

SELECT * FROM myTABLE GROUP BY EmailAddress


use esto (suponga que su nombre de tabla son correos electrónicos):

select * from emails as a inner join (select EmailAddress, min(Id) as id from emails group by EmailAddress ) as b on a.EmailAddress = b.EmailAddress and a.Id = b.id

espero que esto ayude..


No estoy seguro acerca de su DBMS. Entonces, creé una tabla temporal en Redshift y, desde mi experiencia, creo que esta consulta debería devolver lo que estás buscando:

select min(Id), distinct MailId, EmailAddress, Name from yourTableName group by MailId, EmailAddress, Name

Veo que estoy usando una GROUP BY clause pero aún no tendrá dos filas en contra de ningún MailId particular.