Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ¿Se podría con SELECT LIST? (https://www.clubdelphi.com/foros/showthread.php?t=95795)

Angel.Matilla 24-08-2022 10:56:26

¿Se podría con SELECT LIST?
 
Tengo este query:
Código SQL [-]
SELECT Codigo, SUM(Importe) Cuota, RefInt
  FROM Recibos
 WHERE CAST(Codigo AS BLOB)||'$'||RefInt IN ('167$120180702','983$120191001','1475$120201001','1475$120191226','2660$120201001','2660$120191226'  ,'2660$120181226')
 GROUP BY Codigo, RefInt
que me genera esta salida:
Cita:

CODIGO CUOTA REFINT
167 10 120180702
983 10 120191001
1475 20 120191226
1475 20 120201001
2660 18 120181226
2660 18 120191226
2660 18 120201001

y me interesa que los datos del mismo código salgan en la misma línea:
Cita:

CODIGO CUOTA REFINT
167 10 120180702
983 10 120191001
1475 20 120191226,120201001
2660 18 120181226,120191226,120201001

He probado con SELECT LIST así:
Código SQL [-]
SELECT Codigo, SUM(Importe) Cuota, LIST(RefInt, ',')
  FROM Recibos
 WHERE CAST(Codigo AS BLOB)||'$'||RefInt IN ('167$120180702','983$120191001','1475$120201001','1475$120191226','2660$120201001','2660$120191226'  ,'2660$120181226')
 GROUP BY Codigo, RefInt
pero me da el mismo resultado que el query original. He estado mirando otras preguntas mías con temas similares y no acabo de ver que estoy haciendo mal.

duilioisola 24-08-2022 11:15:33

Quita la agrupación por RefInt.

SUM, AVG, MIN, MAX, COUNT, LIST y algún otro que me debo dejar son campos que agrupan el resultado de varios registros.
Si agrupas por CODIGO y REFINT, la lista será de cada REFINT por separado y obviamente contendrá solo un registro.
Si agrupas solo por CODIGO, la lista contedrá todos los REFINT que tengan el mismo código.

Código SQL [-]
select codigo, sum(importe) cuota, list(refint, ',')
from recibos
where
cast(codigo as blob) || '$' || refint in ('167$120180702', '983$120191001', '1475$120201001', '1475$120191226', '2660$120201001', '2660$120191226', '2660$120181226')
group by codigo /*,refint*/

Nota al margen:
A mi me gusta hacer las listas con el separador ', ' (coma + espacio).
Por ejemplo LIST(refint, ', ')
  • La lectura es más facil.
  • Si está dentro de un memo, si está configurado para separar por palabras (WordWrap) corta la línea correctamente y queda más fluido.

Otra opción es que el separador sea un salto de línea (#13#10)
Código SQL [-]
select codigo, sum(importe) cuota, list(refint, ascii_char(13) || ascii_char(10))
from recibos
where
cast(codigo as blob) || '$' || refint in ('167$120180702', '983$120191001', '1475$120201001', '1475$120191226', '2660$120201001', '2660$120191226', '2660$120181226')
group by codigo /*,refint*/

Angel.Matilla 24-08-2022 12:50:35

Muchas gracias. No me había dado cuenta que esta poniendo mal el GROUP.


La franja horaria es GMT +2. Ahora son las 22:35:41.

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