sql 实现统计问题

完整语句如下

select

COUNT(case when tt like 'O型阳性%' then '1' end) as  'O+',

COUNT(case when tt like 'A型阳性%' then '1' end) as  'A+',

COUNT(case when tt like 'AB型阳性%' then '1' end) as  'AB+',

COUNT(case when tt like 'B型阳性%' then '1' end) as  'B+',

COUNT(case when tt like 'O型阴性%' then '1' end) as  'O-',

COUNT(case when tt like 'A型阴性%' then '1' end) as  'A-',

COUNT( case when tt like 'AB型阴性%' then '1' end) as  'AB-',

COUNT(case when tt like 'B型阴性%' then '1' end) as  'B-'

from (

        select distinct

                        a.PatientInId ,

                        LOGDATES as tt from(

                                            select Distinct 

                                                            病历号 as PatientInId ,

                                                            报告项目打印代码 as ICODE ,

                                                            检验结果 as StrValue from [172.31.100.26].[rmlis6].[dbo].[接口视图_检验报告结果]

                                                                                where (报告项目名称 like 'ABO%' or 报告项目名称 like 'RH%')

                                                                                    AND [检验结果] NOT LIKE '%?'

                                                                                    AND [病历号] in (

                                                  select patientinid from [BLOOD2019].[dbo].[BLOOD_SYNC_PATIENT]

                                                                                                    )

                                            ) a

                                      left join (

                                                  select Distinct 

                                                                    d.病历号 as PatientInId ,

                                                                    LOGDATES=(

                                                                              SELECT

                                                                                    ''+检验结果

                                                                                FROM [172.31.100.26].[rmlis6].[dbo].[接口视图_检验报告结果]

                                                                                    WHERE [病历号]=d.[病历号]

                                                                                        and  (报告项目名称 like 'ABO%' or 报告项目名称 like 'RH%')

                                                                                        AND [检验结果] NOT LIKE '%?' 

                                                                                            FOR XML PATH('')

                                                                                )

                                                      from [172.31.100.26].[rmlis6].[dbo].[接口视图_检验报告结果] d

                                                        where (报告项目名称 like 'ABO%' or 报告项目名称 like 'RH%')

                                                            AND [检验结果] NOT LIKE '%?'

                                                            AND [病历号] in (

                                                                      select patientinid from [BLOOD2019].[dbo].[BLOOD_SYNC_PATIENT]

                                                                              )

                                                  ) b 

                                              on a.PatientInId=b.PatientInId 

      )aa

表结构如下“

检验表                                                    |  病人表 

id   病人id   检验代号   检验结果             | 病人id

 1    2020       ABO        A 型                   | 2020 

2    2020      RH          阴性                     | 2021

3   2020       BGZKT    阳性                     |2022


要实现  血型为 A型 阳性的  的有多少个  且在院的 

第一步 先查询出所有人的所有检验项    并进行拼接 检验结果 

select Distinct d.病历号 as PatientInId ,LOGDATES=(SELECT ''+检验结果 FROM [172.31.100.26].[rmlis6].[dbo].[接口视图_检验报告结果]

Distinct  去重是 因为 这个人有几个检验项就会重复几次 造成无效数据  所以 去重

WHERE [病历号]=d.[病历号]and (报告项目名称 like 'ABO%' or 报告项目名称 like 'RH%') AND [检验结果] NOT LIKE '%?'

加上 血型条件   只要abo  rh 

FOR XML PATH('')

加上这个函数  生成数据为     ---A型阴性---   

然后把以上代码合并查询出来结果为

pitientinid      LOGDATES

2020               A型阴性 


第二步  关联 在院病人 使用跨库查询 

AND [病历号] in (select patientinid from [BLOOD2019].[dbo].[BLOOD_SYNC_PATIENT])) b


第三步 使用 case 做计数 查询每个血型的数量

(这里 注意 下面的‘1’ ‘’里面可以是任何东西   count只是做个计数)

                              COUNT(case when tt like 'O型阳性%' then '1' end) as 'O+',

                             COUNT(case when tt like 'A型阳性%' then '1' end) as  'A+',

                              COUNT(case when tt like 'AB型阳性%' then '1' end) as  'AB+',

                             COUNT(case when tt like 'B型阳性%' then '1' end) as  'B+',

                               COUNT(case when tt like 'O型阴性%' then '1' end) as  'O-',

                                 COUNT(case when tt like 'A型阴性%' then '1' end) as  'A-',

                                    COUNT( case when tt like 'AB型阴性%' then '1' end) as  'AB-',

                                   COUNT(case when tt like 'B型阴性%' then '1' end) as  'B-'

重要的就是上面这些 

查询结果为 :

A+    B+   AB+  O+     A-    B-   AB-  O-

2       0      0       0       0       0     0     0

至此 满足echarts 统计图的 数据要求

你可能感兴趣的:(sql 实现统计问题)