Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con group by (https://www.clubdelphi.com/foros/showthread.php?t=31620)

apicito 12-05-2006 13:46:51

Problema con group by
 
Porqué si a esta consulta:
Código Delphi [-]
      SQL.Add('select A.SESASU_GRUPO,A.SESASU_ASUNTO as ASUNTO');
      SQL.Add('from SES'+Part+'ASU A join SES'+Part+'GRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO');
      Sql.Add('where G.SESGRU_MOSTRAR=1');
      SQL.Add('and A.SESASU_SESION='+#39+inttostr(SesCodigo)+#39);
      SQL.Add('union');
      if Datos.CargaIni('Servidor','SOperativo')='Linux' then
        SQL.Add('select A.SESASU_GRUPO,string2blob(G.SESGRU_DESCRIP) as ASUNTO')
      else
        SQL.Add('select A.SESASU_GRUPO,F_STRBLOB(G.SESGRU_DESCRIP) as ASUNTO');
      SQL.Add('from SES'+Part+'ASU A join SES'+Part+'GRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO');
      Sql.Add('where G.SESGRU_MOSTRAR=0');
      SQL.Add('and A.SESASU_SESION='+#39+inttostr(SesCodigo)+#39);
      Sql.Add('group by A.SESASU_GRUPO,G.SESGRU_DESCRIP');
le añado en los select el campo A.SESASU_NUMERO que es un contador dentro del grupo (A.SESASU_GRUPO) de esta forma:
Código Delphi [-]
      SQL.Add('select A.SESASU_GRUPO,A.SESASU_ASUNTO as ASUNTO,A.SESASU_NUMERO');
      SQL.Add('from SES'+Part+'ASU A join SES'+Part+'GRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO');
      Sql.Add('where G.SESGRU_MOSTRAR=1');
      SQL.Add('and A.SESASU_SESION='+#39+inttostr(SesCodigo)+#39);
      SQL.Add('union');
      if Datos.CargaIni('Servidor','SOperativo')='Linux' then
        SQL.Add('select A.SESASU_GRUPO,string2blob(G.SESGRU_DESCRIP) as ASUNTO,A.SESASU_NUMERO')
      else
        SQL.Add('select A.SESASU_GRUPO,F_STRBLOB(G.SESGRU_DESCRIP) as ASUNTO,A.SESASU_NUMERO');
      SQL.Add('from SES'+Part+'ASU A join SES'+Part+'GRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO');
      Sql.Add('where G.SESGRU_MOSTRAR=0');
      SQL.Add('and A.SESASU_SESION='+#39+inttostr(SesCodigo)+#39);
      Sql.Add('group by A.SESASU_GRUPO,G.SESGRU_DESCRIP');
me da error de :
Invalid expression in the Select list (not contained in either an aggregate function or the GROUP BY clause).

waltergomez 12-05-2006 14:08:46

Tenes que agregar A.SESASU_NUMERO en la clausula GROUP BY.

Salu2,

gzerox 12-05-2006 14:19:48

Saludos amigo

tu pregunta esta un poco confusa, te sugiero que coloques cada una de las tablas que usas en tu sentencia con una breve descripcion de cada campo, ademas de cual es el resultado que quieres obtener, para ver si asi te podemos ayudar.:)

apicito 12-05-2006 14:25:41

waltergomez
Si añado A.SESASU_NUMERO en el group by todos los registros serian diferentes, por lo que no conseguiería lo deseado: que solo aparezca un registro por cada código de grupo en el segundo select. Este campo necesitaría incluirlo para que los resultados del primer select aparecieran ordenados por Grupo y, dentro de este, por numero.

gzerox
El enlace es hacía este mismo hilo.

waltergomez 13-05-2006 02:28:02

apicito, mi respuesta es correcta dada tu pregunta.

Cita:

me da error de :
Invalid expression in the Select list (not contained in either an aggregate function or the GROUP BY clause).
Lee cualquier Tutorial o Help de SQL y te daras cuenta como funciona la clausula ORDER BY.
Ademas creo que estas confundiendo GroupBy con Order By.

Cita:

Este campo necesitaría incluirlo para que los resultados del primer select aparecieran ordenados por Grupo y, dentro de este, por numero.
Saludos,

apicito 15-05-2006 09:14:56

waltergomez Gracias por responder y perdona por no explicarme como es debido. Voy a intertarlo de nuevo:
Mi problema está en que necesito añadir en el select el campo A.SESASU_NUMERO para posteriormente hacer un order by que lo incluya (esto no aparece el el trozo de código que pegué) pero no quiero incluirlo en el group by porque solo quiero agrupar por group by A.SESASU_GRUPO,G.SESGRU_DESCRIP ya que sino me aparecerían todos los registros en el segundo select.
Realmente me llegaría con agrupar solo por A.SESASU_GRUPO, pero si lo hago así me dá el error de Invalid expression in the Select list (not contained in either an aggregate function or the GROUP BY clause).
Esto es lo que no entiendo, ya que mirando manuales y ejemplos de group by entiendo que se puede hacer group by sobre una sola columna del select.

lucasarts_18 19-05-2006 15:36:28

Cita:

Empezado por apicito
Esto es lo que no entiendo, ya que mirando manuales y ejemplos de group by entiendo que se puede hacer group by sobre una sola columna del select.

Estás mal, los group by deben ser usadas con funciones de agrupamiento (Max, Sum, Min, Etc..), cosa que no veo es tu consulta, eso es !!

Hasta Luego -

apicito 23-05-2006 08:32:25

Gracias, no lo sabía.


La franja horaria es GMT +2. Ahora son las 05:23:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi