首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -如何跨行透视和组合数据

SQL -如何跨行透视和组合数据
EN

Stack Overflow用户
提问于 2019-08-02 20:22:10
回答 2查看 75关注 0票数 1

我尝试在一个包含个人生命体征的数据集上为一个健康应用程序建模,想象一下Fitbit。但是,对于给定的人,这些生命体征是作为单独的行记录和报告的。例如。

代码语言:javascript
复制
TableName: PersonalVitals

PersonID | RecordedTime | VitalType | VitalValue 
   1     |    17:10     |   HR      |    72bpm       <- Heart rate
   1     |    17:10     |   RR      |    19insp/min  <- Respiratory rate
   2     |    15:35     |   RR      |    11insp/min  <- Respiratory rate
   1     |    17:15     |   HR      |    76bpm       <- Heart rate

现在,在提取时,我需要对此数据进行透视,以便将在同一时间内获取的所有生命体征一起报告,如下所示

代码语言:javascript
复制
PersonID | RecordedTime |   HR   |   RR        |  SpO2   |  BP(Blood Pressure)
   1     |    17:10     |  72bpm | 19insp/min  |  null   |    null
   1     |    17:15     |  76bpm |    null     |  null   |    null  
   2     |    15:35     |  null  | 11insp/min  |  null   |    null  

如何在SQL (sql-server或postgres)中实现上述功能?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-02 20:51:38

使用Postgres时,我会将所有关键字聚合到一个JSONB值中,然后将它们提取为列:

代码语言:javascript
复制
select person_id, 
       recorded_time, 
       vitals ->> 'HR' as "HR", 
       vitals ->> 'RR' as "RR", 
       vitals ->> 'SpO2' as "SpO2", 
       vitals ->> 'BP' as "Blood Pressure"
from (
  select person_id, recorded_time, 
         jsonb_object_agg(vital_type, vital_value) as vitals
  from person_vitals 
  group by person_id, recorded_time
) t
order by person_id, recorded_time;

在线示例:https://rextester.com/ONNU50709

与所有透视解决方案一样,如果添加新的重要类型,则需要更改查询。有了上面的解决方案,就足以在外部查询中做到这一点。内部查询不需要更改。

如果处理该结果的代码可以处理JSON值,我将直接返回内部查询的结果,而不是将其转换为单独的列。

票数 1
EN

Stack Overflow用户

发布于 2019-08-02 20:29:21

使用Pivot

代码语言:javascript
复制
SELECT PersonID , RecordedTime,[HR],[RR] ,SpO2,[BP(Blood Pressure)]
FROM
(
SELECT * ,NULL AS  SpO2,NULL AS [BP(Blood Pressure)]
FROM #PersonalVitals
)
As Src
PIVOT
(
MAX(VitalValue) FOR VitalType IN ([HR],[RR]))AS Pvt
ORDER BY PersonID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57326430

复制
相关文章

相似问题

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