¿La mejor manera de aplanar / desnormalizar las tablas de búsqueda de SQL?

Tengo un montón de tablas como esta:

Lookup_HealthCheckupRisks ------------ ID Name 1 Anemia 2 Anorexic 3 Bulemic 4 Depression ... 122 Syphilis PatientRisksOnCheckup ------------------ ID CheckupID RiskID 1 11 2 2 11 3 3 12 1 4 14 1 5 14 3 ... 

Pero necesito una versión aplanada, como esta:

 PatientCheckup ------------------ CheckupID Risk_1 Risk_2 Risk_3 Risk_4 .. Risk_122 11 0 1 1 0 0 12 1 0 0 0 0 13 0 0 0 0 0 14 1 0 1 0 0 

No tengo ni idea de cómo hacer esto, lo mejor que puedo pensar es escribir una tabla temporal, definir las 122 columnas y luego hacer If Exists ( SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j ) INSERT INTO PatientCheckup (1) WHERE CheckupID=j e iterar sobre i, j... > _ <

Escribir esta consulta para una sola tabla no es lo mejor posible, pero necesito aplanar datos como este para otras treinta tablas del mismo tamaño. Er … sugerencias por favor?

También tengo curiosidad por saber si lo que estoy haciendo es algo común que hacer o no …

Necesito desnormalizar / aplanar los datos sql para el software de statistics.

Lo que necesita se llama una consulta cruzada.

Si está utilizando Microsoft SQL Server, puede usar el operador PIVOT para hacerlo.

Otras marcas de RDBMS tienen soporte variable para este tipo de consulta. En el peor de los casos, tendrá que usar SQL dynamic para codificar el valor de la tabla de búsqueda en una unión a su tabla principal. Esto no es práctico cuando tienes 122 valores distintos.

También vea las preguntas SO labeldas pivote o tabla cruzada .

Utilice PIVOT TABLE aquí – Microsoft y aquí – tutorial .

Necesitará Hovewer para especificar todas las columnas. Pero puede usar el command sp_executesql para usar SQL dynamic.

¿Qué tal el uso de desencadenantes en INSERTAR Y ACTUALIZAR, ELIMINAR, para que estas tablas desnormalizadas se llenen …

    Intereting Posts