proc almacenado

17/12/2005 - 02:48 por Amaia Ruiz | Informe spam
Hoal de nuevo:

Tengo un problema con un procedimiento almacenado. Quiero sacar los hombres
y mujeres que tengan 18 años, pero que hayan visitado un casino entre dos
fechas. Si hago esto:

SELECT '18-30' AS Edad,Sexo, count(*) AS Cantidad
FROM CLIENTE
WHERE Datediff(Year, c.Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='F'
GROUP BY sexo

UNION ALL

SELECT '18-30' AS Edad, Sexo, count(*) AS Cantidad
FROM CLIENTE
WHERE Datediff(Year, Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='V'
GROUP BY sexo

me salel, pero claro no sale por fecha, pero si hago esto:
SELECT '18-30' AS Edad,Sexo, count(*) AS Cantidad

FROM CLIENTE --inner join visitas as vis
WHERE Datediff(Year, c.Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='F'
GROUP BY sexo

UNION ALL

SELECT '18-30' AS Edad, Sexo, count(*) AS Cantidad

FROM CLIENTE
WHERE Datediff(Year, Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='V'
GROUP BY sexo

es decir, haciendo el inner join con visitas, me da error en el where.
Alguien sabe porqué puede ser?. Necesito hacer ese procedimiento por fechas.
Muchas gracias por cualquier pequeña aportación

AMAIA

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
17/12/2005 - 05:17 | Informe spam
Si asi es como tienes la consulta el problema es que te falta indicar por
que campo(s) se relacionan las tablas en el JOIN:

inner join visitas on cliente.el_campo = visitas.el_campo

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 Victor
17/12/2005 - 13:31 | Informe spam
Antes de poner el Select en el Command lo deberías probar con el analizador
de consultas de la siguiente manera:

DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME

SET @Fecha1='01/01/2005'
SET @Fecha2='31/12/2005'

SELECT '18-30' AS Edad, A.Sexo, count(DISTINCT A.IdCliente) AS
CantidadDeClientes, count(*) AS CantidadDeVisitas
FROM Cliente A
INNER JOIN Visitas B ON A.IdCliente=B.IdCliente
WHERE Datediff(Year, A.Fecha_Nac, Getdate()) BETWEEN 18 AND 30
AND B.Fecha BETWEEN @Fecha1 AND @Fecha2
GROUP BY A.Sexo

Lo preparado de cabeza pero creo que funcionará

No entiendo porque haces el UNION ALL en este caso creo que no es necesario,
simplemente no filtres por sexo y el GROUP BY te hará el trabajo, si el
problema es que tienes otro tipo de codificación de sexo por ejemplo 'D' o
NULL para Desconocido, puedes hacer AND A.Sexo IN ('F','V').

Espero que te resuelva el problema.

Un abrazo.



"Amaia Ruiz" escribió en el mensaje
news:
Hoal de nuevo:

Tengo un problema con un procedimiento almacenado. Quiero sacar los


hombres
y mujeres que tengan 18 años, pero que hayan visitado un casino entre dos
fechas. Si hago esto:

SELECT '18-30' AS Edad,Sexo, count(*) AS Cantidad
FROM CLIENTE
WHERE Datediff(Year, c.Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and


sexo='F'
GROUP BY sexo

UNION ALL

SELECT '18-30' AS Edad, Sexo, count(*) AS Cantidad
FROM CLIENTE
WHERE Datediff(Year, Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='V'
GROUP BY sexo

me salel, pero claro no sale por fecha, pero si hago esto:
SELECT '18-30' AS Edad,Sexo, count(*) AS Cantidad

FROM CLIENTE --inner join visitas as vis
WHERE Datediff(Year, c.Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and


sexo='F'
GROUP BY sexo

UNION ALL

SELECT '18-30' AS Edad, Sexo, count(*) AS Cantidad

FROM CLIENTE
WHERE Datediff(Year, Fecha_Nac, Getdate()) BETWEEN 18 AND 30 and sexo='V'
GROUP BY sexo

es decir, haciendo el inner join con visitas, me da error en el where.
Alguien sabe porqué puede ser?. Necesito hacer ese procedimiento por


fechas.
Muchas gracias por cualquier pequeña aportación

AMAIA
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida