首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅导致一行的联接表

仅导致一行的联接表
EN

Stack Overflow用户
提问于 2014-12-16 11:03:39
回答 3查看 47关注 0票数 0

我正尝试加入以下两张表格:

代码语言:javascript
复制
       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

以便对所有按服务分组的病人进行年龄分离。

代码语言:javascript
复制
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,3次)

所以我想加入这两个表,但只有一行。

我怎么能这么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-16 11:32:24

使用sum()代替count(distinct)。下面是一个示例:

代码语言:javascript
复制
SELECT serviceid,
       COUNT(DISTINCT CASE WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(patient.birthdate AS INTEGER)) /365.25 ) BETWEEN 0 AND 15
                           THEN Patient.Id 
                      END) AS [Under 15],
       . . .
票数 0
EN

Stack Overflow用户

发布于 2014-12-16 11:12:17

使用Distinct操作符。您的查询应该如下所示:

代码语言:javascript
复制
   SELECT Distinct a.id, a.birthdate ,b.patient from
   patient a inner join incident b ON a.serviceid=b.serviceid
票数 0
EN

Stack Overflow用户

发布于 2014-12-16 12:13:19

使用group by serviceid代替group by patient.patient_id

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27503139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档