【发布时间】:2015-08-23 06:12:37
【问题描述】:
我正在尝试做一些在其他语言中非常简单但在 SQL 中证明相当令人费解的事情。
我有一个数据库,其中患者 ID 为行,100 个症状为列。症状是二元的,0 或 1,如果患者有或没有。假设患者 1 有 0, 1, 1, ... 用于咳嗽、打喷嚏、头痛等。患者 2 类似地具有症状 1、0、1、...的二进制列表。
我想要做的只是生成一个表格,其中包含具有该症状组合的患者数量的成对症状计数。
所以当我在新表中抬头时,我可以看到有多少人同时打喷嚏和咳嗽。有多少人同时有头痛和打喷嚏等等。只能成对。如果我查看打喷嚏和打喷嚏,它会让我回到打喷嚏的人数。类似于行和列中症状的矩阵格式以及内容中患有该症状的患者数量。
使用 for 循环,这在任何其他语言中都非常容易。不过,我是 SQL 新手,正在努力寻找一种有效的方法来做到这一点。
【问题讨论】:
-
这是什么数据库? SQL Server?
-
是的,正是一个以 I 和 j 为症状的矩阵。
-
如果你可以控制结构,我建议创建一个表格来保存症状
-
最佳解决方案因 DBMS 而异,您似乎忽略了 Donal 关于它是哪一个的问题。如果你想要一个答案,你需要用供应商标记你的问题,最好是你正在使用的数据库版本
-
关键是对您的数据进行反透视,以便每个患者的每个症状都有一行,然后将此数据连接到自身以获得成对的症状,然后将连接的数据向上透视以获取您的计数。由于我不知道要使用哪个 DBMS,我无法回答这个问题,但我创建了一个 working demo in SQL Server 来演示如何操作。
标签: sql data-analysis