压缩/反规范化SQL查找表的最佳方法是什么?

rlb*_*usa 9 sql sql-server pivot lookup-tables

我有一堆像这样的表:

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
...
Run Code Online (Sandbox Code Playgroud)

但我需要一个扁平版本,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我不知道如何做到这一点,我能想到的最好的是写一个临时表,定义所有122列,然后If Exists ( SELECT * FROM PatientRisksOnCheckup where RiskID=i and checkupID=j ) INSERT INTO PatientCheckup (1) WHERE CheckupID=j迭代i, j...> _ <

仅针对一个表编写此查询是不可行的,但是我需要将这样的数据展平为另外30个相同大小的表.呃......建议好吗?

我也很想知道我在做什么是不常见的事情......?

我需要对统计软件的sql数据进行非规范化/扁平化.

Bil*_*win 10

您需要的是一个交叉表查询.

如果您使用的是Microsoft SQL Server,则可以使用PIVOT运算符来执行此操作.

其他品牌的RDBMS对此类查询有不同的支持.最糟糕的情况是,您必须使用动态SQL将查找表中的非常值代码硬编码到主表的连接中.当您有122个不同的值时,这是不实际的.

另请参阅标记为pivot交叉表的 SO问题.