• Lunes 23 de Diciembre de 2024, 05:47

Autor Tema:  Sentencia Sql  (Leído 912 veces)

   

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Sentencia Sql
« en: Domingo 31 de Octubre de 2004, 01:44 »
0
Saludos nuevamente comunidad,

Comparto nuevamente un problema relacionado a las SQL, tengo una sentencia sql que buscar de una tabla e inserta en otra.  El problema radica en que faltan campos en la sql, por lo que la sentencia toma los datos (faltando 4) y los insertan en otra tabla (amboas tablas tienen la misma cantidad de campos)

Para dar a entender mejor el problema, esta es la sql:

Código: Text
  1.  
  2.         SQL1 = "INSERT INTO REPORTE ("
  3.         'SQL1 = SQL1 & " Gestion, "
  4.         'SQL1 = SQL1 & " Fecha, "
  5.         'SQL1 = SQL1 & " Dias_Habiles, "
  6.         'SQL1 = SQL1 & " Mes, "
  7.         SQL1 = SQL1 & " Oficina, "
  8.         SQL1 = SQL1 & " Servicio, "
  9.         SQL1 = SQL1 & " Remesados, "
  10.         SQL1 = SQL1 & " Recibidos, "
  11.         SQL1 = SQL1 & " No_Entregados, "
  12.         SQL1 = SQL1 & " Faltante, "
  13.         SQL1 = SQL1 & " Equivocados, "
  14.         SQL1 = SQL1 & " Cantidad "
  15.         SQL1 = SQL1 & ") "
  16.         SQL1 = SQL1 & " SELECT"
  17.         'SQL1 = SQL1 & "  Gestion, "
  18.         'SQL1 = SQL1 & "  Fecha, "
  19.         'SQL1 = SQL1 & "  Dias_Habiles, "
  20.         'SQL1 = SQL1 & "  Mes, "
  21.         SQL1 = SQL1 & "  oficina,"
  22.         SQL1 = SQL1 & "  servicio,"
  23.         SQL1 = SQL1 & "  SUM(VAL(remesados)) AS remesados1,"
  24.         SQL1 = SQL1 & "  SUM(VAL(recibidos)) AS recibidos1,"
  25.         SQL1 = SQL1 & "  SUM(VAL(no_entregados)) AS no_entregados1,"
  26.         SQL1 = SQL1 & "  SUM(VAL(faltante)) AS faltante1, "
  27.         SQL1 = SQL1 & "  SUM(VAL(equivocados)) AS equivocados1, "
  28.         SQL1 = SQL1 & "  SUM(VAL(cantidad)) AS cantidad1 "
  29.         SQL1 = SQL1 & "FROM Masivos "
  30.         SQL1 = SQL1 & "GROUP BY oficina, servicio;"
  31.  
  32.  

Los campos que estan como "comentario" son los campos que no acepta la SQL, lo cual no se explicaría el porqué, ya que estos campos los tienen ambas tablas (tanto de la que se toman los datos como en la que se insertaran estos datos).

Al correr esta sentencia SQL en Access produce el siguiente error:
Citar
Ha intentado ejecutar una consulta que no incluye la expresión especificada 'xxxx' como parte de una función de agregado.
donde xxxx es cualquier de los campos que estan indicados en "comentario" en el código de la sql.  Este mismo aviso de error sucede al correr la sql por igual en el VisData del vb.

En este caso, la SQL1 busca en la tabla 'Masivos' e inserta en la Tabla 'Reporte' ambas tienen los mismos campos y debido a que la sql no acepta los campos que faltan, la tabla Reporte se llena faltandole los campos que se encuentran en comentario.

¿a qué se deberia la razón de este problema?

nuevamente muchas gracias por su ayuda

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Sentencia Sql
« Respuesta #1 en: Martes 2 de Noviembre de 2004, 11:40 »
0
Hola ___

Te ocurre lo siguiente:
Mediante esta sentencia SQL insertas en una tabla valores agrupados de otra tabla... Fíjate en esto: los campos que 'cascan' son los que no cuentan con ninguna función de agregado (Suma , Cuenta , Máximo, etc.) y además no se encuentran entre los campos por los que agrupas.

A ver si me explico un poco mejor.  Agrupas por los campos 'oficina' y 'servicio', seleccionas las sumas de una serie de campos para cada intervalo de agrupación (por cada cambio de oficina y de servicio, la suma de los registros agrupados) y ¿qué pasa con el resto de los campos?, ¿qué valor debe mostrarse para cada registro? La respuesta a esta pregunta es el origen del problema...

Para solucionar este tema añade una función de agregado a cada uno de los campos que no la tienen. Por ejemplo usa la función FIRST(Nombre_Campo) para que el valor que se muestre sea el del primer registro. Con esto seguro que se soluciona el problema.

Chao.