Лучший способ сгладить / денормализовать таблицы поиска 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... >_

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

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

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

3 9

3 ответа:

То, что вам нужно, называется перекрестным запросом.

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

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

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

Используйте сводную таблицу здесь - Microsoft и здесь - учебник.

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

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