2009-09-22 13 views
9

Mam kilka stolików tak:Najlepszy sposób na spłaszczanie/denormalizowanie tabel wyszukiwania 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 
... 

Ale muszę spłaszczoną wersję, tak:

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 

Jestem pojęcia, jak to zrobić, co mogę myśleć jest napisanie temp tabeli, zdefiniowanie wszystkich 122 kolumn, a następnie wykonaj If Exists (SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j) INSERT INTO PatientCheckup (1) WHERE CheckupID=j i iteracyjne nad i, j...> _ <

Pisanie to zapytanie do jednego stołu jest wykonalne nie najlepsza, ale ja trzeba spłaszczyć li danych Zapamiętaj to za kolejne trzydzieści stołów tego samego rozmiaru. Er ... sugestie proszę?

Jestem również ciekawy, czy to, co robię, jest czymś normalnym, czy nie ...?

Potrzebuję denormalize/flatten danych sql dla oprogramowania statystycznego.

+0

Proszę opisać bazy danych, którego używasz. – RedFilter

+0

+1 dzięki za bycie zdrowym człowiekiem na Stackoverflow –

Odpowiedz

10

To, czego potrzebujesz, to zapytanie o tabelę krzyżową.

Jeśli używasz Microsoft SQL Server, możesz użyć operatora PIVOT, aby to zrobić.

Inne marki RDBMS mają różną obsługę tego typu zapytań. Najgorszy przypadek polega na tym, że będziesz musiał użyć dynamicznego SQL, aby zakodować bardzo dużą wartość z tabeli odnośników do połączenia z główną tabelą. Nie jest to praktyczne, gdy masz 122 odrębne wartości.

Zobacz także pytania dotyczące SO oznaczone jako pivot lub crosstab.

-1

Jak o użyciu wyzwalaczy na INSERT i UPDATE, DELETE, tak że te nieznormalizowana tabela zostanie wypełnione ...

Powiązane problemy