2009-09-22 2 views
9

У меня есть куча таблиц, как это:Лучший способ сгладить/denormalize таблицы поиска 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 
... 

Но мне нужна сплющенную версия, как это:

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 

Я невежественный, как сделать это, лучшее, что я могу думать о чтобы написать временную таблицу, определить все 122 столбцов, а затем сделать If Exists (SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j) INSERT INTO PatientCheckup (1) WHERE CheckupID=j и перебрать i, j...> _ <

Запись этого запроса только для одной таблицы выполнимо не лучший, но я должен выравниваться Li данных ke это для еще тридцати столов одинакового размера. Er ... предложения, пожалуйста?

Мне также интересно узнать, является ли то, что я делаю, обычная вещь или нет ...?

Мне нужно денормализовать/сплющить данные sql для программного обеспечения статистики.

+0

Пожалуйста, опишите, что базы данных вы используете. – RedFilter

+0

+1 спасибо за то, что вы здоровый человек на Stackoverflow –

ответ

10

Что вам нужно, так и называется кросс-табличным запросом.

Если вы используете Microsoft SQL Server, для этого вы можете использовать оператор PIVOT.

Другие марки РСУБД имеют различную поддержку для этого типа запроса. В худшем случае вам придется использовать динамический SQL для жесткого кода очень важного значения из таблицы поиска в соединение с вашей основной таблицей. Это нецелесообразно, если у вас 122 различных значения.

Также см. Вопросы SO с пометкой pivot или crosstab.

1

Использовать таблицу PIVOT Here - Microsoft и here - tutorial.

Вам понадобится hovewer, чтобы указать все столбцы. Но вы можете использовать команду sp_executesql для использования динамического SQL.

-1

Как об использовании триггеров на INSERT И UPDATE, DELETE, так что этот Денормализованный стол заполняется до ...

 Смежные вопросы

  • Нет связанных вопросов^_^