SQL - Error de Sintaxis en operación JOIN

 
Vista:

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 22/10/2014 13:38:47
Buenos días,

Estoy intentando ejecutar la siguiente sentencia:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT CN, NOMBRE, SUM(CANTIDAD) AS DIFERENCIA
FROM (
((SELECT[RE_DISP#RE_ENV].[Codigodispensado] AS CN,
[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM ([CATALOGO#CATALOGO] INNER JOIN [RE_DISP#RE_ENV] ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado])
WHERE ((DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014)) AND ([RE_DISP#RE_ENV].[Tipoventa] >= 182 AND [RE_DISP#RE_ENV].[Tipoventa] <= 182)
GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE)
 
UNION ALL
 
(SELECT [ENTIDAD#Fac_ent_lineas].[Codigo], [Medicamento], (SUM(UNI) *(-1)) 
FROM
(SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento], SUM([Unidades]) AS UNI
     FROM [ENTIDAD#Fac_ent_lineas] 
     WHERE ([Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50))
     GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
UNION ALL
SELECT [ENTIDAD#GLOBAL_VENTA].[Codigo], [Medicamento], SUM([ENTIDAD#GLOBAL_VENTA].[Unidades]) 
     FROM ([ENTIDAD#GLOBAL_VENTA] INNER JOIN [CATALOGO#CATALOGO] ON      [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]) WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
     GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento])
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento])
ORDER BY CN, CANTIDAD)
)
GROUP BY CN


Y me sale un error que dice: "Error de Sintaxis en operación JOIN". Si quito las sentencias que están en negrita si que funciona sin error, pero no hay manera de que funcione con ellas.

Estoy prácticamente convencido de que el error no es por paréntesis, he hecho pruebas al respecto. Agradecería la ayuda de alguien.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Error de Sintaxis en operación JOIN

Publicado por leonardo_josue (1173 intervenciones) el 22/10/2014 21:33:18
Hola Enrique:

Pues aunque digas lo contrario, apostaría el sanwitch de mi desayuno a que el problema lo tienes justamente con los paréntesis... haces un uso excesivo (y completamente inútil por cierto), de paréntesis.

Por la sintaxis de tu consulta, puedo suponer que estás trabajando con Access y peor aun, que estás utilizando el asistente de consultas para obtener el resultado que quieres... ese es un problema muy grave, ya que tienes muchísima basura que lo único que ocasiona es justamente que compliques algo que en teoría debe ser sencillo.

Vayamos por partes.

Según lo que entiendo en realidad se tratan de tres consultas anidadas... es decir, por un lado tienes en la parte inferior dos consultas las cuales unes con un UNION ALL, y el resultado de esto, pretendes unirlo a la primer consulta mediante otro UNION ALL, ¿correcto? desde aquí tienes que tener cuidado, sobre todo por el hecho de que estás utilizando la cláusula ORDER BY y cuando utilizas UNION, DEBES HACER EL ORDENAMIENTO HASTA EL FINAL DE TU CONSULTA. Puede ser que todo el problema radique justamente en el ORDER BY, quítalo del select interno y haz la prueba. Hay algunos motores que no te permiten hacer ordenaciones internas justamente porque estas son completamente inutiles.

Ahora, pasemos a la parte de los paréntesis que te comentaba al inicio, tú tienes esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(
SELECT
    [RE_DISP#RE_ENV].[Codigodispensado] AS CN,
    [CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
    SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM
    (
        [CATALOGO#CATALOGO] 
        INNER JOIN [RE_DISP#RE_ENV] 
            ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
    )
WHERE
    (
        (
            DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND 
            DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND 
            MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND 
            YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014
        )
    ) AND
    (
        [RE_DISP#RE_ENV].[Tipoventa] >= 182 AND [RE_DISP#RE_ENV].[Tipoventa] <= 182
    )
GROUP BY
    [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
)

es decir, tomo desde el paréntesis que está en antes del segundo SELECT hasta el primer UNION ALL

Si quitas TODOS LOS PARENTESIS que no forman parte de las llamadas a las funciones, el resultado es exactamente el mismo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(
SELECT
    [RE_DISP#RE_ENV].[Codigodispensado] AS CN,
    [CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
    SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM
    [CATALOGO#CATALOGO] 
INNER JOIN
    [RE_DISP#RE_ENV] ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
WHERE
    DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND 
    DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND 
    MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND 
    YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014 AND 
    [RE_DISP#RE_ENV].[Tipoventa] >= 182 AND 
    [RE_DISP#RE_ENV].[Tipoventa] <= 182
GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
)

Te recuerdo que los paréntesis SÓLO DEBES UTILIZARLOS CUANDO REALMENTE LOS NECESITAS, es decir, cuando tienes que alterar el órden de ejecución de alguna condición.

En matemáticas, es lo mismo que pongas "((1) + ((2)))" a poner simplemente "1 + 2", sin embargo no es lo mismo poner
"1 * 3 + 2" a poner "1 * (3 + 2)" ¿se entiende el punto?

NO UTILICES PARÉNTESIS SÓLO POR USARLOS, y si estos los pone el editor de consultas, entonces quítalos.

Te pido que "LIMPIES" un poco tu consulta, trata de eliminar todos los paréntesis inutiles, quita la parte del ORDER BY y vuelve a probar... si continuas con problemas, postea la consulta que tienes sin tanta basura y trataremos de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 22/10/2014 21:41:53
Gracias por tu respuesta y por la explicación, mañana probare tus consejos. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 23/10/2014 13:16:58
Buenos días,

He limpiado la consulta como me recomendaste y ha quedado así:

SELECT CN, NOMBRE, CANTIDAD
FROM
(
SELECT[RE_DISP#RE_ENV].[Codigodispensado] AS CN,
[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM [CATALOGO#CATALOGO] INNER JOIN [RE_DISP#RE_ENV]
ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
WHERE DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND
DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND
MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND
YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014 AND
[RE_DISP#RE_ENV].[Tipoventa] >= 182 AND
[RE_DISP#RE_ENV].[Tipoventa] <= 182
GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
)

UNION ALL
(
SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
SUM(UNI) *(-1)
FROM (SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
SUM([Unidades]) AS UNI
FROM [ENTIDAD#Fac_ent_lineas]
WHERE [Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50)
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
UNION ALL
SELECT [ENTIDAD#GLOBAL_VENTA].[Codigo],
[Medicamento],
SUM([ENTIDAD#GLOBAL_VENTA].[Unidades])
FROM [ENTIDAD#GLOBAL_VENTA] INNER JOIN [CATALOGO#CATALOGO]
ON [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]
WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento])
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
)


El problema es que cuando intento usar una función de agregación para sumar las cantidades positivas y negativas, me da un error "Error de sintaxis en la consulta union". No encuentro sentido a porque si funciona sin función de agregación y cuando la añado no. La consulta con la función de agregación es:

SELECT CN, NOMBRE, SUM (CANTIDAD) AS DIFERENCIA
FROM
(
SELECT[RE_DISP#RE_ENV].[Codigodispensado] AS CN,
[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM [CATALOGO#CATALOGO] INNER JOIN [RE_DISP#RE_ENV]
ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
WHERE DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND
DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND
MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND
YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014 AND
[RE_DISP#RE_ENV].[Tipoventa] >= 182 AND
[RE_DISP#RE_ENV].[Tipoventa] <= 182
GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
)

UNION ALL
(
SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
SUM(UNI) *(-1)
FROM (SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
SUM([Unidades]) AS UNI
FROM [ENTIDAD#Fac_ent_lineas]
WHERE [Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50)
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
UNION ALL
SELECT [ENTIDAD#GLOBAL_VENTA].[Codigo],
[Medicamento],
SUM([ENTIDAD#GLOBAL_VENTA].[Unidades])
FROM [ENTIDAD#GLOBAL_VENTA] INNER JOIN [CATALOGO#CATALOGO]
ON [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]
WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento])
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
)
GROUP BY CN, NOMBRE


Tiene que ser una tontería pero yo no lo veo.

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Aldo (1 intervención) el 23/10/2014 14:24:30
prueba por separado y luego junta ambas con el union
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 23/10/2014 16:34:24
Por separado todo funciona, si pongo SELECT CN, NOMBRE, SUM (CANTIDAD) y el correspondiente GROUP BY CN, NOMBRE, me da el error y en cambio si pongo SELECT CN, NOMBRE, CANTIDAD no me da ningún error. No consigo entender donde esta el maldito error y la diferencia...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Error de Sintaxis en operación JOIN

Publicado por leonardo_josue (1173 intervenciones) el 23/10/2014 20:34:26
Hola de nuevo Enrique...

Ahora que la consulta quedó más legible, veo varios detalles que pueden afectar tu resultado. Partamos de la consulta que dices que funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
SELECT CN, NOMBRE, CANTIDAD
FROM
( <!-- OJO CON ESTE PARENTESIS
	SELECT 
		[RE_DISP#RE_ENV].[Codigodispensado] AS CN,
		[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
		SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
	FROM [CATALOGO#CATALOGO] 
	INNER JOIN 
		[RE_DISP#RE_ENV] ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
	WHERE 
		DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND
		DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND
		MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND
		YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014 AND
		[RE_DISP#RE_ENV].[Tipoventa] >= 182 AND
		[RE_DISP#RE_ENV].[Tipoventa] <= 182
		GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
) <!-- OJO CON ESTE PARENTESIS 
UNION ALL
(
	SELECT 
		[ENTIDAD#Fac_ent_lineas].[Codigo], 
		[Medicamento], 
		SUM(UNI) *(-1) 
	FROM	
	(
		SELECT 
			[ENTIDAD#Fac_ent_lineas].[Codigo],
			[Medicamento],
			SUM([Unidades]) AS UNI
		FROM 
			[ENTIDAD#Fac_ent_lineas] 
		WHERE 
			[Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50)
		GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
		UNION ALL
		SELECT 
			ENTIDAD#GLOBAL_VENTA].[Codigo],
			[Medicamento],
			SUM([ENTIDAD#GLOBAL_VENTA].[Unidades]) 
		FROM 
			[ENTIDAD#GLOBAL_VENTA] I
		INNER JOIN 
			[CATALOGO#CATALOGO] ON [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]
		WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
		GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento]
	)
	GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
)

Sólo le dí un poco de formato para que no se vea todo "encimado", te recomiendo que hagas lo mismo, pues te sirve para darte cuenta de muchas omisiones y errores. Creo que el problema es que no estás cuidando correctamente el alcance de los paréntesis y hasta donde se "cierran" las consultas.

En el código agregué dos etiquetas que dicen

1
<!-- OJO CON ESTE PARENTESIS

y es porque aquí viene un problema... al poner el SELECT del inicio, su "influencia" termina hasta la segunda etiqueta, es decir, antes del primer UNION ALL... Cuando lo colocas así, sin el GROUP BY, en realidad NO HAY NINGÚN PROBLEMA, pues el motor simplemente hace la UNION de la consulta de arriba con la de abajo. Sin embargo, cuando tratas de hacer el GROUP BY, en realidad pretendes hacerlo SOBRE EL RESULTADO DE LA UNION, sin embargo como comenté al inicio, el segundo paréntesis con la etiqueta MARCA UN FIN DE CONSULTA...

Aquí si es necesario el uso de paréntesis...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
SELECT CN, NOMBRE, SUM(CANTIDAD)
FROM
( <!-- Este paréntesis se agrega, y engloba TODA LA CONSULTA COMPLETA
	(
		SELECT 
			[RE_DISP#RE_ENV].[Codigodispensado] AS CN,
			[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
			SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
		FROM [CATALOGO#CATALOGO] 
		INNER JOIN 
			[RE_DISP#RE_ENV] ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado]
		WHERE 
			DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND
			DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND
			MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND
			YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014 AND
			[RE_DISP#RE_ENV].[Tipoventa] >= 182 AND
			[RE_DISP#RE_ENV].[Tipoventa] <= 182
			GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE
	)
	UNION ALL
	(
		SELECT 
			[ENTIDAD#Fac_ent_lineas].[Codigo] AS CN, 
			[Medicamento] AS NOMBRE, 
			SUM(UNI) *(-1) AS CANTIDAD 
		FROM	
		(
			SELECT 
				[ENTIDAD#Fac_ent_lineas].[Codigo],
				[Medicamento],
				SUM([Unidades]) AS UNI
			FROM 
				[ENTIDAD#Fac_ent_lineas] 
			WHERE 
				[Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50)
			GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
			UNION ALL
			SELECT 
				ENTIDAD#GLOBAL_VENTA].[Codigo],
				[Medicamento],
				SUM([ENTIDAD#GLOBAL_VENTA].[Unidades]) 
			FROM 
				[ENTIDAD#GLOBAL_VENTA] I
			INNER JOIN 
				[CATALOGO#CATALOGO] ON [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]
			WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
			GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento]
		)
		GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
	)
) <!-- Este paréntesis se agrega, y engloba TODA LA CONSULTA COMPLETA
GROUP BY CN, NOMBRE

Observa que agregué un paréntesis INMEDIATAMENTE DESPUÉS DEL PRIMER SELECT, y este paréntesis se cierra HASTA EL FINAL, ANTES DEL GROUP BY... de esta manera, tanto el SELECT, como la agrupación SI SE HACEN CON EL TOTAL DE LA CONSULTA, no sólo con la primer parte.

Otra observación importante es que al hacer UNION's trates de asignarles los mismos alias a todos los campos, por defecto los motores de BD's asignan el primer nombre que encuentren, pero es una mejor práctica asegurarte de nombrar los campos correctamente, en la segunda parte de la consulta agregué los alias para casa campo:

1
2
3
4
5
...
[ENTIDAD#Fac_ent_lineas].[Codigo] AS CN, 
[Medicamento] AS NOMBRE,
SUM(UNI) *(-1) AS CANTIDAD
...

Espero que con esto sea suficiente, haz la prueba y nos comentas.

Saludos.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 23/10/2014 21:32:55
Antes de nada gracias por intentar ayudarme, lo agradezco porque sinceramente me esta volviendo loco.

Respecto a tu respuesta, estoy totalmente de acuerdo contigo, así es como debería funcionar, pero lo estuve probando antes de pegar la consulta y resulta que así me da 'error de sintaxis en operación join' así que probé sin paréntesis. Lo dicho continuo sin saber porque me da ese error. ¿Alguien tiene la solución?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Error de Sintaxis en operación JOIN

Publicado por leonardo_josue (1173 intervenciones) el 23/10/2014 22:36:55
Hola de nuevo...

Antes que nada, debes tener cuidado al copiar y pegar las consultas, porque pueden tener caracteres raros o errores en las sentencias... por ejemplo, veo varios errores que deberías cuidar si es que copiaste la consulta que puse...

para muestra, en esta parte:

1
2
3
4
5
6
7
8
...
SELECT
				ENTIDAD#GLOBAL_VENTA].[Codigo],
				[Medicamento],
				SUM([ENTIDAD#GLOBAL_VENTA].[Unidades]) 
			FROM
				[ENTIDAD#GLOBAL_VENTA] I
...

Falta un corchete que habra en el primer campo y en el FROM hay una letra I que está de más.

Te recomiendo que incluyas un pantallazo de tu error, así como el mensaje completo, algunos DBMS's dan información adicional que puede ayudarte, por ejemplo, la línea donde está el error, o el motivo por el que aparece el error. Sigues sin mencionarnos con qué motor de BD's estás trabajando, hay que descartar cualquier motivo.

También sería conveniente, si es posible, que adjuntaras la BD's, para poder descargarla y hacer pruebas de nuestro lado, a veces cuando estás tanto tiempo enfrascado con un problema sin poder resolverlo, como es el caso, terminas por cometer errores infantiles que no ves...

Suerte
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de Sintaxis en operación JOIN

Publicado por Enrique (15 intervenciones) el 24/10/2014 09:46:02
Tuve en cuenta esos caracteres de más y de menos que me comentas, pero aún así me da "error 3135 error de sintaxis en operación JOIN". No puedo colgar las BD's porque son de la empresa, no particulares. Trabajan con Access. Estoy intentando encontrar la explicación pero no la encuentro. Tengo una consulta creada ya, y que funciona (aunque con paréntesis innecesarios) en la que aparecen por un lado las unidades en positivo de una tabla y por otro las unidades en negativo de otra tabla. Buscaba algo tan sencillo como sumar las dos y saber la diferencia entre ambas, pero me está resultando imposible. Adjunto la consulta que les comento y que funciona:

((SELECT [RE_DISP#RE_ENV].[Codigodispensado] AS CN,
[CATALOGO#CATALOGO].[Nombre] AS NOMBRE,
SUM([RE_DISP#RE_ENV].[Cantidaddispensada]) AS CANTIDAD
FROM ([CATALOGO#CATALOGO] INNER JOIN [RE_DISP#RE_ENV] ON [CATALOGO#CATALOGO].[Codigo]=[RE_DISP#RE_ENV].[Codigodispensado])
WHERE ((DAY([RE_DISP#RE_ENV].[Fecha]) >= 1 AND
DAY([RE_DISP#RE_ENV].[Fecha]) <= 22 AND
MONTH([RE_DISP#RE_ENV].[Fecha]) = 10 AND
YEAR([RE_DISP#RE_ENV].[Fecha]) = 2014)) AND
([RE_DISP#RE_ENV].[Tipoventa] >= 182 AND [RE_DISP#RE_ENV].[Tipoventa] <= 182)
GROUP BY [RE_DISP#RE_ENV].[Codigodispensado], NOMBRE)

UNION ALL

(SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
(SUM(UNI) *(-1))
FROM
(SELECT [ENTIDAD#Fac_ent_lineas].[Codigo],
[Medicamento],
SUM([Unidades]) AS UNI
FROM [ENTIDAD#Fac_ent_lineas]
WHERE ([Codpaquete] IN (1,2,3,4,8,9,12,14,16,19,22,26,28,29,30,33,34,36,38,42,45,46,49,50))
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento]
UNION ALL
SELECT [ENTIDAD#GLOBAL_VENTA].[Codigo],
[Medicamento],
SUM([ENTIDAD#GLOBAL_VENTA].[Unidades])
FROM ([ENTIDAD#GLOBAL_VENTA] INNER JOIN [CATALOGO#CATALOGO] ON [ENTIDAD#GLOBAL_VENTA].[Codigo]=[CATALOGO#CATALOGO].[Codigo]) WHERE [ENTIDAD#GLOBAL_VENTA].[Tv] = 182
GROUP BY [ENTIDAD#GLOBAL_VENTA].[Codigo],[Medicamento])
GROUP BY [ENTIDAD#Fac_ent_lineas].[Codigo],[Medicamento])
ORDER BY CN, CANTIDAD)


Ya les digo que hay paréntesis innecesarios (es la consulta original sin limpiar). En teoría era tan fácil como poner:
SELECT CN, NOMBRE, SUM(CANTIDAD)
FROM


la consulta de arriba,
GROUP BY CN, NOMBRE

Con la consulta de arriba lo que obtengo es:

CN NOMBRE CANTIDAD
446015 libreta 3
446015 libreta -3



Y simplemente buscaba obtener:
CN NOMBRE CANTIDAD
446015 libreta 0


Un saludo. Gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar