- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了以下 Patients
表。
HospitalId INT,
GenderId BIT,
Age TINYINT,
DiseaseId SMALLINT
GenderId
= 0 为男性
GenderId
= 1 为女性
HospitalA 的 HospitalId
为 0
HospitalB 的 HospitalId
1
这是我想要生成的输出:
DiseaseId | HospitalA_Male_18-30 | HospitalA_Male_31-40 |
---------------------------------------------------------
0 | (count here) | (count here) |
1 | (count here) | (count here) |
2 | (count here) | (count here) |
3 | (count here) | (count here) |
(专栏继续)
HospitalA_Female_18-30 | HospitalA_Female_31-40 |
-------------------------------------------------
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(专栏继续)
HospitalB_Male_18-30 | HospitalB_Male_31-40 |
---------------------------------------------
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(专栏继续)
HospitalB_Female_18-30 | HospitalB_Female_31-40 |
-------------------------------------------------
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(count here) | (count here) |
(结果集中9列)
如您所见,我实际上需要针对每种疾病计算每个特定组中有多少患者患有这种疾病(按医院、性别和年龄类别)。
如何在 T-SQL 中(最有效地)完成此类分组?
最佳答案
您可以使用数据透视查询来完成:
select * from
(
select diseaseid,
'Hospital'
+ case hospitalid when 0 then 'A' when 1 then 'B' end
+ '_'
+ case genderid when 1 then 'Female' else 'Male' end
+ '_'
+ case when age between 18 and 30
then '18-30'
else (case when age between 31 and 40 then '31-40' end)
end Title,
1 Cnt
from Patients
where age between 18 and 40
) t
pivot (
count (Cnt) for Title in (
[HospitalA_Male_18-30], [HospitalA_Male_31-40],
[HospitalA_Female_18-30], [HospitalA_Female_31-40],
[HospitalB_Male_18-30], [HospitalB_Male_31-40],
[HospitalB_Female_18-30], [HospitalB_Female_31-40]
)
) as Q
更新
作为上述解决方案的发展,您还可以将名称部分从 CASE 表达式移动到它们自己的虚拟表中,并将 Patients
表连接到它们:
;with
hospital (hospitalid, hospitalname) as (
select 0, 'HospitalA' union all
select 1, 'HospitalB'
),
gender (genderid, gendername) as (
select 0, 'Male' union all
select 1, 'Female'
),
agerange (agefrom, ageto) as (
select 18, 30 union all
select 31, 40
)
select * from
(
select p.diseaseid,
h.hospitalname + '_' + g.gendername + '_'
+ rtrim(a.agefrom) + '-' + rtrim(a.ageto) as Title,
1 Cnt
from Patients p
inner join hospital h on p.hospitalid = h.hospitalid
inner join gender g on p.genderid = g.genderid
inner join agerange a on p.age between a.agefrom and a.ageto
where p.age between 18 and 40
) t
pivot (
count (Cnt) for Title in (
[HospitalA_Male_18-30], [HospitalA_Male_31-40],
[HospitalA_Female_18-30], [HospitalA_Female_31-40],
[HospitalB_Male_18-30], [HospitalB_Male_31-40],
[HospitalB_Female_18-30], [HospitalB_Female_31-40]
)
) as Q
添加子选择和连接的开销被更容易的维护所弥补:
(元)数据部分与逻辑部分分离;
名称部分列表更方便根据需要扩展;
连接表达式更易于修改,以防您需要更改目标列名称的格式。
关于tsql - 如何计算复杂年龄/性别/等群体的人数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739997/
是否可以知道有多少人连接到一个 session ?我希望实现一种只允许两个人连接的机制,如果超过两个人,将显示一个警报。 最佳答案 当您获得 sessionConnected 事件时,您将获得一组连接
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
Discord.js版本11.4.2 我如何打印所有行会名称及其成员数量? if (message.content === '!list') { message.channel.send("Che
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 5年前关闭。
我正在使用由20个c3.8xlarge机器组成的ec2 hadoop群集,每台机器具有60 GB RAM和32个虚拟CPU。 在每台机器上,我都按https://docs.aws.amazon.com
我有一个包含以下数据的表 emp: EmpID EmpName MgrID 100 King NULL 101 Smith 100 102
我正在尝试创建一个无限循环的内容 slider 。我目前让它循环 3 个元素,但我想实现一个功能,让它始终循环而无需更新脚本。 我想知道的是,如果我可以创建一个 if 语句来表示“如果 x 大于 .q
我是一名优秀的程序员,十分优秀!