2009-09-22 21 views
9

Tengo un montón de tablas de la siguiente manera:¿La mejor manera de aplanar/desnormalizar las tablas de búsqueda de SQL?

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

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 puede pensar es escribir una tabla temporal, definir todas las 122 columnas, y luego hacer If Exists (SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j) INSERT INTO PatientCheckup (1) WHERE CheckupID=j y iterar sobre i, j...> _ <

Escribiendo esta consulta para una sola tabla es factible no es el mejor, pero he necesitan para aplanar los datos li esto por otras treinta mesas 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 de sql para el software de estadísticas.

+0

Por favor describa lo que la base de datos que está utilizando. – RedFilter

+0

+1 gracias por ser una persona sensata en Stackoverflow –

Respuesta

10

Lo que necesita se llama consulta cruzada.

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

Otras marcas de RDBMS tienen compatibilidad variable para este tipo de consulta. En el peor de los casos, tendrá que usar SQL dinámico 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.

Ver también SO preguntas etiquetadas pivot o crosstab.

-1

Cómo sobre el uso de activadores para insertar y actualizar, eliminar, de manera que éstos tabla sin normalizar se llena ...

Cuestiones relacionadas