我有很多这样的表:
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...
>_
只为一个表编写此查询是可行的,但不是最好的,但我需要为另外 30 个相同大小的表展平这样的数据。呃...请提出建议?
我也很好奇我正在做的事情是否是一件常见的事情......?
我需要对统计软件的 sql 数据进行非规范化/扁平化。
您需要的是所谓的交叉表查询。
如果您使用的是 Microsoft SQL Server,则可以使用PIVOT http://msdn.microsoft.com/en-us/library/ms177410.aspx操作员来执行此操作。
其他品牌的 RDBMS 对此类查询的支持各不相同。最坏的情况是您必须使用动态 SQL 将查找表中的非常值硬编码到主表的联接中。当您有 122 个不同的值时,这是不切实际的。
另请参阅标记的问题pivot https://stackoverflow.com/questions/tagged/pivot or crosstab https://stackoverflow.com/questions/tagged/crosstab.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)