【发布时间】:2015-02-14 16:13:37
【问题描述】:
我正在尝试加入以下两个表:
Table Patient | Table incident
patient.id patient.birthdate | incident.patientid serviceid
1 1/1/2000 | 1 8
2 1/1/1990 | 1 8
3 1/1/2005 | 2 10
4 1/1/1980 | 3 11
5 1/1/2000 | 3 11
6 1/1/1990 | 3 11
7 1/1/1980 | 6 23
8 1/1/2000 | 7 8
为了对按 serviceid 分组的所有患者进行年龄分离。
SELECT serviceid,
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 0 AND 15 THEN 1 ELSE 0 END) AS [Under 15],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 16 AND 18 THEN 1 ELSE 0 END) AS [16-18],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 19 AND 23 THEN 1 ELSE 0 END) AS [19-23],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 24 AND 30 THEN 1 ELSE 0 END) AS [24-30],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS [31-40],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS [41-50],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 51 AND 65 THEN 1 ELSE 0 END) AS [51-65],
SUM(CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) > 65 THEN 1 ELSE 0 END) AS [>65]
from patient
inner join incident
on patient.id = incident.patientConcerned
group by serviceid
但我在上面尝试的是计算所有患者的所有事件的年龄,这意味着我没有计算不同的患者。 (例如,我将患者 1 计数两次,将患者 3 计数三次)
所以我想加入这两个表,但只有一行。
我该怎么做?
【问题讨论】:
-
为什么需要加入表格?只是为了知道一个病人有一个或多个事件?如果是这种情况,请将条件移至 WHERE 子句(EXISTS...)。
-
任何事件都可以做到这一点。我不介意,他们都有我想要的信息
-
你用的是什么数据库? mysql?甲骨文?