SQL - error al momento de agregar el group by

 
Vista:
sin imagen de perfil

error al momento de agregar el group by

Publicado por Brenda (2 intervenciones) el 22/01/2016 02:06:06
begin
FOR SELECT AA.ORDEN_PROD_ID, AA.FOLIO
FROM MG_ORDENES_PROD AA
WHERE AA.FOLIO BETWEEN :FOLIO_INICIO AND :FOLIO_FINAL or (AA.FECHA BETWEEN :FECHA_INI AND :FECHA_FIN)
INTO ORDEN_PROD_ID, FOLIO
DO
FOR SELECT C.NOMBRE PROVEEDOR, A.PROVEEDOR_ID, A.FALTANTES, A.ORDEN_PROD_NEC_REQ_ID,
A.SELECCION, B.ORDEN_PROD_NEC_REQ_ID, B.ARTICULO_ID, B.CLAVE_ARTICULO,
B.NOMBRE_ARTICULO, B.UNIDAD_VENTA, B.CANTIDAD, B.EXISTENCIA, B.POR_RECIBIR, B.POR_SURTIR
--POR_NECESITAR, B.EST_FALTANTES
FROM MG_ORDENES_PROD_NEC_REQ A
LEFT JOIN MG_ORDEN_PROD_MOST_NEC(A.ORDEN_PROD_NEC_REQ_ID, :FECHA_CORTE, :ALMACEN_ID, 'N', 'A') B
ON (A.ORDEN_PROD_NEC_REQ_ID = B.ORDEN_PROD_NEC_REQ_ID)
LEFT JOIN PROVEEDORES C ON (A.PROVEEDOR_ID = C.PROVEEDOR_ID)
INNER JOIN MG_ARTICULOS_FAB D ON (A.ARTICULO_ID = D.ARTICULO_ID)
WHERE A.ORDEN_PROD_ID = :ORDEN_PROD_ID
AND D.TIPO = 'Materia prima' AND D.TIPO <> 'Producto terminado'
AND A.CANTIDAD > 0
INTO PROVEEDOR, PROVEEDOR_ID, FALTANTES, ORDEN_PROD_NEC_REQ_ID,
SELECCION, ORDEN_PROD_NEC_REQ_ID_B, ARTICULO_ID, CLAVE_ARTICULO,
NOMBRE_ARTICULO, UNIDAD_VENTA, CANTIDAD, EXISTENCIA, POR_RECIBIR, POR_SURTIR

/*Aqui es donde me marca el error en el group by, PROBE DE LAS 2 FORMAS*/

GROUP BY NOMBRE_ARTICULO;
--GROUP BY B.NOMBRE_ARTICULO;

DO
begin
suspend;
end

end
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
Imágen de perfil de xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

error al momento de agregar el group by

Publicado por xve (284 intervenciones) el 22/01/2016 11:01:59
Y que error te da?
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 al momento de agregar el group by

Publicado por Brenda (2 intervenciones) el 22/01/2016 16:26:21
mi procedimiento lo hago en Ibexpert y el error que me arroja es el siguiente:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 47, column 6.
GROUP.
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 al momento de agregar el group by

Publicado por leonardo_josue (1173 intervenciones) el 22/01/2016 21:24:20
Hola Brenda...

Antes de postear tu código SQL, debes comenzar por describir qué problema tienes y qué es lo que esperas obtener de respuesta... el que digas /*Aqui es donde me marca el error en el group by, PROBE DE LAS 2 FORMAS*/ en realidad no es una petición de ayuda.

Debes mencionar también con qué motor de BD's estás trabajando, puedo suponer que se trata de InterBase o Firebird, pero sólo Dios y tú saben con qué versión/edición estás trabajando. Ojo con eso.

Ahora bien, si estoy en lo correcto, tienes un error de sintaxis con la consulta... ya que la cláusula GROUP BY debe ir antes del INTO... checa la sintaxis para definir un cursor:

http://www.firebirdsql.org/refdocs/langrefupd25-psql-forselect.html

Observa que antes del INTO debes colocar UNA CONSULTA SQL VÁLIDA

de tal suerte que antes que hacer el FOR debes asegurarte que la consulta funcione por sí sola:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  C.NOMBRE PROVEEDOR, A.PROVEEDOR_ID, A.FALTANTES, A.ORDEN_PROD_NEC_REQ_ID,
  A.SELECCION, B.ORDEN_PROD_NEC_REQ_ID, B.ARTICULO_ID, B.CLAVE_ARTICULO,
  B.NOMBRE_ARTICULO, B.UNIDAD_VENTA, B.CANTIDAD, B.EXISTENCIA, B.POR_RECIBIR, B.POR_SURTIR
FROM MG_ORDENES_PROD_NEC_REQ A
LEFT JOIN MG_ORDEN_PROD_MOST_NEC(A.ORDEN_PROD_NEC_REQ_ID, :FECHA_CORTE, :ALMACEN_ID, 'N', 'A') B
  ON (A.ORDEN_PROD_NEC_REQ_ID = B.ORDEN_PROD_NEC_REQ_ID)
LEFT JOIN PROVEEDORES C
  ON (A.PROVEEDOR_ID = C.PROVEEDOR_ID)
INNER JOIN MG_ARTICULOS_FAB D
  ON (A.ARTICULO_ID = D.ARTICULO_ID)
WHERE
  A.ORDEN_PROD_ID = :ORDEN_PROD_ID
  AND D.TIPO = 'Materia prima' AND D.TIPO <> 'Producto terminado'
  AND A.CANTIDAD > 0
GROUP BY NOMBRE_ARTICULO;

Veo algunos problemas en la consulta, por ejemplo, no encuentro sentido en que hagas un GROUP BY cuando no estás utilizando ninguna función de agrupación (MIN, MAX, COUNT, AVG, etc).

Tengo además serias dudas en si funcionará o no, si bien tengo bastante tiempo de no trabajar con IB o FB, es posible que la cláusula GROUP BY no funcione si no listas todos los campos incluyes en el SELECT, aunque hay algunos DBMS's como MySQL que si permiten hacer lo que quieres...

Entonces, comienza desde lo básico, prueba una consulta hasta que esta te arroje exactamente los datos que necesitas para cargar al cursor y entonces sigues la siguiente sintaxis:

1
2
3
FOR <Aquí pones tu consulta completamente funcional>
   INTO <Aquí pones tu lista de variables para el cursor>
DO

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