Лучший способ выровнять / денормализовать таблицы поиска SQL - PullRequest
9 голосов
/ 22 сентября 2009

У меня есть несколько таких таблиц:

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...> _ <</p>

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

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

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

Ответы [ 3 ]

10 голосов
/ 22 сентября 2009

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

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

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

Также см. ТАК вопросы с меткой pivot или crosstab .

1 голос
/ 22 сентября 2009

Используйте PIVOT TABLE Здесь - Microsoft и здесь - учебник .

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

0 голосов
/ 02 марта 2013

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

...