2009-09-22 5 views
9

Ho un mucchio di tabelle in questo modo:Il modo migliore per appiattire/denormalizzare le tabelle di ricerca 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 
... 

Ma ho bisogno di una versione appiattita, in questo modo:

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 

Sono all'oscuro come fare questo, il meglio che posso pensare è quello di scrivere una tabella temporanea, definire tutti i 122 colonne, e poi fare If Exists (SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j) INSERT INTO PatientCheckup (1) WHERE CheckupID=j e iterare i, j...> _ <

Scrivendo questa query per un solo tavolo è fattibile non è la migliore, ma ho bisogno di appiattire i dati li fate questo per altri trenta tavoli della stessa misura. Er ... suggerimenti per favore?

Sono anche curioso di sapere se quello che sto facendo è una cosa comune da fare o non ...?

Ho bisogno di denormalizzare/appiattire i dati SQL per il software di statistiche.

+0

Descrivere database in uso. – RedFilter

+0

+1 grazie per essere una persona sana di StackOverflow –

risposta

10

Quello che ti serve è chiamato una query a campi incrociati.

Se si utilizza Microsoft SQL Server, è possibile utilizzare l'operatore PIVOT per farlo.

Altre marche di RDBMS hanno un supporto variabile per questo tipo di query. Nel peggiore dei casi è necessario utilizzare SQL dinamico per codificare molto valore dalla tabella di ricerca in un join alla tabella principale. Questo non è pratico quando si hanno 122 valori distinti.

Vedere anche domande SO contrassegnate pivot o crosstab.

-1

Come sull'utilizzo trigger su di inserimento e aggiornamento, DELETE, in modo che questi tavolo Denormalizzato si riempie ...