回答

收藏

展平/反规范化SQL找表的最佳方法?

技术问答 技术问答 312 人阅读 | 0 人回复 | 2023-09-14

我有一堆这样的表:
2 B, D  R2 X3 j5 oLookup_HealthCheckupRisks------------ID  Name1   Anemia2   Anorexic3   Bulemic4   Depression...122   SyphilisPatientRisksOnCheckup------------------ID CheckupID RiskID 11111      222 11111   33           14  14 14         15  14            33   33      333             14 14  14         14                                        14                                                           1411111111114             14141414141414                             1414141414141414                                                                                                                                                                                                                                                                                                    ...但我需要一个扁平化的版本,比如:) e$ c+ r: k5 t3 R7 a
PatientCheckup------------------CheckupID Risk_1 Risk_2 Risk_3 Risk_4 .. Risk_122111                                   12                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             我不知道如何执行这个操作。我能想到的最好方法是编写一个临时表,定义所有122列,然后执行它If Exists ( SELECT * FROMPatientRisksOnCheckup where RiskID=i and checkupID=j ) INSERT INTOPatientCheckup (1) WHERE CheckupID=j并遍历i,j...> _
- c5 p9 D4 i" r这个查询不是仅仅为一个表编写的最好方法,但我需要像这样为其他30个相同大小的表展平数据。…有什么建议吗?
: {. I( }2 B& R. M我也想知道我在做什么是否是一件普通的事情…?
$ d7 W0 s: {. A7 N5 D我需要统计软件SQL数据归一化/展平。9 i3 z  ]; M/ i" K* C; W. L
                                                               
7 M* v+ ]! @3 F+ l0 K    解决方案:                                                                + j( x; w1 A; k
                                                                您需要的叫做交叉表查询。8 y- ~$ O- i8 q3 Y
假如你用的是Microsoft SQL Server,则可以使用PIVOT操作操作操作符。! l8 w" k* V/ l7 X
其他品牌的RDBMS对这种类型的查询有不同的支持。最糟糕的是,你必须使用动态SQL将非常有价值的值从搜索表硬编码到主表连接。当你有122个不同的值时,这是不现实的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则