Jump to content

Consulta Sobre Query SQL Server


nkdos

Recommended Posts

Saludos,

 

Resulta que tengo una duda, tengo una tabla y necesito hacer un match, pero no sé como hacerlo. Resulta que entre otras columnas, tiene USUARIO y MENSAJE.

 

Lo que necesito saber todos los usuarios que enviaron el MENSAJE "BIENVENIDO" y "SALIR", he realizado una QUERY pero quiero asegurarme que sea lo correcto. Lo que tengo es:

SELECT
	USUARIO
FROM 
	MITABLA
WHERE
	MITABLA.MENSAJE IN ( 'BIENVENIDO','SALIR' )
GROUP BY
	MITABLA.USUARIO
HAVING
	COUNT(*) >1

Está bien la forma que estoy haciendo esto? es la mejor forma o existe una mejor?

 

 

 

Saludos

 

Link to comment
Share on other sites

Mal... Si quieres tener el listado de usuarios, elimina el group by y el having y reemplázalo con un distinct

 

Select distinct Usuario.id from blabla (sin el group y sin el having)

 

El group se utliza generalmente para realizar operaciones sobre un grupo de registros (el having para filtrar esos resultados)... Tu no estás haciendo una operación, digamos count, sum, avg, etc. Por lo tanto, no deberías usar group, aunque igual puedes...

 

Te lo planteo así: si fuera un certamen, te pondría medio punto por tu respuesta, no un punto.

 

Salu2.

Link to comment
Share on other sites

Pero según lo que me comentas, al hacerlo de esa forma, sólo podría ver lo usuarios que tienen el mensaje HOLA y los que tienen el mensaje SALIR, no los que tienen ambos mensajes o me equivoco?

Link to comment
Share on other sites

Vas a ver todos los que tengan uno o los dos mensajes.

SELECT  DISTINCT
	USUARIO
FROM 
	MITABLA
WHERE
	MITABLA.MENSAJE IN ( 'BIENVENIDO','SALIR' )

Si quieres ver los que tengan ambos mensajes tienes que hacer otra consulta distinta... Pensando en que un Usuario puede tener varios 'BIENVENIDO' y/o varios 'SALIR'... Pero si tienen uno de cada uno, y quieres ver los que tienen ambos, la consulta que hiciste es la correcta.

 

Se me olvidó... lo muevo a servidores :tonto:

Link to comment
Share on other sites

Ahh, perfecto, osea si tienen más de 1 BIENVENIDO o SALIR, la query no me funcionaria y tendría que hacer 2 consultas distintas. De ser así, existe forma de unirlas? por ejemplo, con un UNION, algún SELECT anidado o algo?

 

 

Saludos

Link to comment
Share on other sites

Es que no es necesario... Tienes que definir bien qué es lo que quieres...

 

Si quieres que devuelva:

 

1- Cuando tiene un 'BIENVENIDO' o 'SALIR'

2- Cuando tiene un 'BIENVENIDO' y 'SALIR'

3- Cuando tiene uno o más 'BIENVENIDO' o uno o más 'SALIR'

4- Cuando tiene uno o más 'BIENVENIDO' y uno o más 'SALIR'

 

Para la 1 y 3 el DISTINCT te sirve... Para las otras 2 necesitas otra consulta que sume por MENSAJE... http://msdn.microsoft.com/en-us/library/ms189461.aspx

 

 

SAlu2.

Link to comment
Share on other sites

  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...