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)
-   -   Totales...pero en columnas (https://www.clubdelphi.com/foros/showthread.php?t=89097)

rretamar 25-09-2015 22:28:48

Totales...pero en columnas
 
Hola.
Una consulta para los más conocedores de SQL. Supongamos que tengo la siguiente tabla:

ID es un número único que identifica a un estudio (por ejemplo ecografías. ecografía 1, 2, 3, etc). Anatomía es un número que identifica el lugar del cuerpo donde se hace el estudio (por ejemplo: 1=abdomen, 2=hombro, 3=cuello, etc. etc.)

Entonces a medida que hacemos estudios, la tabla se va poblando de una forma como esta, nada raro:

Código:

ID  Anatomia
1    4
2    2         
3    2
4    5
5    3
...

De esta manera es muy fácil (usando group by) hacer un "ranking" de anatomías, para saber que tipo de zonas son las que más estudios tuvieron.

Pero un día el médico ecografista dice: cuidadín, que en una sola sesión al paciente se le pueden hacer hasta un máximo de cinco ecografías en zonas distintas. :p

Entonces la estructura de la tabla se hace así:

Código:

ID  Anatomia1  Anatomia2  Anatomia3  Anatomia4  Anatomia5
1  2              3
2  6
3  1              3              2              5
4  2 
...

Lo que permite que en un único registro se puedan ingresar varias anatomías para un mismo estudio.

En este caso, cada registro (que representa una sesión de escografía, guarda los datos de hasta cinco anatomías)

El problema en este caso es el agrupamiento, ya que hasta donde tengo entendido, no puedo hacer un group-by si los datos están dispuestos de esa forma. Un solución es crear una tabla temporal similar a la primera...volcando los datos de la segunda....y recién ahí calcular el "ranking" de anatomías.

¿ Se les ocurre alguna idea mejor que crear una tabla temporal ?.

Saludos !

Casimiro Notevi 25-09-2015 22:59:23

Si no te he entendido mal, lo que necesitas es pasar "filas a columnas", haz una búsqueda por "pivot", creo que esa es la solución.

roman 25-09-2015 23:48:09

¿Y si el técnico les dice que pueden ser cinco, o siete o diez estudios? Yo creo que puedes plantear una tabla con dos campos (sesionId, anatomia). Cada registro correspondería a una sóla sesión y tu código verificaría que no se inserten más registros para cada sesionId de los qe indique el técnico. El campo sesionId apuntaría a una tabla con la infromación que requieras de cada sesión: paciente, fecha, etc.

De esta manera puedes usar lo que ya tenías con el group by.

// Saludos

fjcg02 26-09-2015 14:37:45

Mira a ver este hilo.

http://clubdelphi.com/foros/showthre...formadas+pivot

La procedure devuelve la select que te hace lo que necesitas.

Saludos


La franja horaria es GMT +2. Ahora son las 04:55:31.

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