PDA

Ver la Versión Completa : Totales...pero en columnas


rretamar
25-09-2015, 22:28:48
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:

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í:

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/showthread.php?t=63336&highlight=trasnformadas+pivot

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

Saludos