繁体   English   中英

合并行并根据多个条件连接

[英]Merge rows and concatenate based on multiple conditions

原始数据

命令 服务 ID 日期 State 姓名 结果
7 命脉 12345 10/2/2019 阿拉巴马州 收缩 115
39 命脉 12345 10/2/2019 阿拉巴马州 体重指数 27.5
62 命脉 12345 10/2/2019 阿拉巴马州 舒张期 64
519 命脉 12345 10/2/2019 阿拉巴马州 舒张期 70
114 命脉 12345 11/5/2019 阿拉巴马州 收缩 111
442 命脉 12345 11/5/2019 阿拉巴马州 体重指数 28
10 命脉 12345 12/19/2019 阿拉巴马州 体重指数 29
89 命脉 12345 12/19/2019 阿拉巴马州 收缩 100
90后 命脉 12345 12/19/2019 阿拉巴马州 舒张期 62
529 命脉 12345 12/19/2019 阿拉巴马州 舒张期 90后
417 命脉 12345 12/19/2019 阿拉巴马州 收缩 99
77 命脉 12345 2020 年 4 月 7 日 阿拉巴马州 收缩 110
78 命脉 12345 2020 年 4 月 7 日 阿拉巴马州 舒张期 NULL
343 命脉 12345 2020 年 4 月 7 日 阿拉巴马州 体重指数 23
120 命脉 12345 2020 年 4 月 7 日 阿拉巴马州 舒张期 NULL
321 命脉 12345 2020 年 4 月 7 日 阿拉巴马州 收缩 106
39 命脉 12345 9/29/2020 阿拉巴马州 舒张期 82
97 命脉 12345 9/29/2020 阿拉巴马州 收缩 120
815 命脉 12345 9/29/2020 阿拉巴马州 体重指数 22
19 命脉 12345 2/2/2021 阿拉巴马州 收缩 108
20 命脉 12345 2/2/2021 阿拉巴马州 舒张期 59
983 命脉 12345 2/2/2021 阿拉巴马州 体重指数 24
984 命脉 12345 2/2/2021 阿拉巴马州 收缩 133
210 命脉 12345 2/2/2021 阿拉巴马州 舒张期 68

期望的结果

服务 ID 日期 State 姓名 结果
命脉 12345 10/2/2019 阿拉巴马州 血压 115/70
命脉 12345 10/2/2019 阿拉巴马州 体重指数 27.5
命脉 12345 11/5/2019 阿拉巴马州 收缩 111
命脉 12345 11/5/2019 阿拉巴马州 体重指数 28
命脉 12345 12/19/2019 阿拉巴马州 体重指数 29
命脉 12345 12/19/2019 阿拉巴马州 血压 100/90
命脉 12345 2020 年 4 月 7 日 阿拉巴马州 收缩 110
命脉 12345 2020 年 4 月 7 日 阿拉巴马州 舒张期 NULL
命脉 12345 2020 年 4 月 7 日 阿拉巴马州 体重指数 23
命脉 12345 2020 年 4 月 7 日 阿拉巴马州 舒张期 NULL
命脉 12345 2020 年 4 月 7 日 阿拉巴马州 收缩 106
命脉 12345 9/29/2020 阿拉巴马州 体重指数 22
命脉 12345 9/29/2020 阿拉巴马州 血压 120/82
命脉 12345 2/2/2021 阿拉巴马州 体重指数 24
命脉 12345 2/2/2021 阿拉巴马州 血压 133/68

免责声明 - 这只是属于 ID 12345 的数据子集,还有数千个。

我想要一个使用 sql 服务器返回结果所需图片的查询,其中:

  1. 基于 ID、Date 和 State - 在结果列中以“收缩期”/“舒张期”的格式合并收缩期和舒张期的 MAX
  2. 合并后在名称栏中归类为血压
  3. 有时会缺少舒张期或收缩期或 null。如果是这种情况,请保留它。 (在结果所需的图片中 - 请参阅日期 11/5/2019 和 4/7/2020 以进行澄清

我已使用此链接作为参考来提供帮助,但我的建议很短。 不确定如何将上述条件包含在结果中。

With test as
    
(
select  service,ID, Date, state, Name, results, case when  name = 'Systole' or t.BiometricName= 'Diastole'then   'Blood Pressure' else Name end [New_Name] 
from    mytable t ) 

SELECT DIStiNCT service,    ID,     Date,   state,  Name,   results,            new_name
FROM test

抱歉,这个 markdown 不是很好(我会尝试编辑它),我希望我不会把它弄得太臃肿。

使用 SQL 服务器 2014 - 12.0.5223.6

提前致谢

一点点巧妙的聚合应该可以解决问题。

select
  service,
  ID,
  Date,
  state,
  case when min(name) = 'Diastole' and max(name) = 'Systole' then 'Blood Pressure' else min(Name) end AS [New_Name],
  case when min(name) = 'Diastole' and max(name) = 'Systole' then
      concat(
        min(case when name = 'Diastole' then results end),
        '/',
        min(case when name = 'Systole'  then results end)
      )
    else min(results) end AS results
from mytable t
where results is not null
group by
  service,
  ID,
  Date,
  state,
  case when name not in ('Systole', 'Diastole') then name end;

数据库<>小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM