繁体   English   中英

SQL 服务器 - Pivot 医师实例的列和计数

[英]SQL Server - Pivot Column and Count number of Physician Instances

我的 pivot 声明有问题。 本质上,问题是我们有一组患者,他们在设定的时间段内被不同的医生看过。 在此期间,患者可能已经多次看过医生。 目标是能够拥有一个 output,其中每行代表一名患者,不同的医生有自己各自的列,其中显示特定患者与医生的会面次数的连续计数。

我的查询结果:

患者编号 年龄 性别 种族 种族 保险 医师
123 60 男性 白色的 不是Hisp 上市 物理123
123 60 男性 白色的 不是Hisp 上市 物理123
123 60 男性 白色的 不是Hisp 上市 物理123
123 60 男性 白色的 不是Hisp 上市 物理456
456 40 女性 黑色的 不是Hisp 私人的 物理456
456 40 女性 黑色的 不是Hisp 私人的 物理456
789 70 女性 白色的 麻麻 私人的 物理789

下面以 DML 和 DDL 示例作为表变量进行演示:

DECLARE @Visits TABLE (Patient_ID INT, Age SMALLINT, Sex NVARCHAR(10), Race NVARCHAR(10), Ethnicity NVARCHAR(10), Insurance NVARCHAR(10), Physician NVARCHAR(10))
INSERT INTO @Visits (Patient_ID, Age, Sex, Race, Ethnicity, Insurance, Physician) VALUES 
(123, 60, 'Male' ,'White' ,'Not Hisp' ,'Public' ,'Phys123'),
(123, 60, 'Male' ,'White' ,'Not Hisp' ,'Public' ,'Phys123'),
(123, 60, 'Male' ,'White' ,'Not Hisp' ,'Public' ,'Phys123'),
(123, 60, 'Male' ,'White' ,'Not Hisp' ,'Public' ,'Phys456'),
(456, 40, 'Female' ,'Black' ,'Not Hisp' ,'Private' ,'Phys456'),
(456, 40, 'Female' ,'Black' ,'Not Hisp' ,'Private' ,'Phys456'),
(789, 70, 'Female' ,'White' ,'Hisp' ,'Private' ,'Phys789')

Phys123 - 苏珊元帅

Phys456 - 迈克·安德鲁斯

Phys789 - 米歇尔贝尔

我期望的是:

患者编号 年龄 性别 种族 种族 保险 苏珊元帅 迈克·安德鲁斯 米歇尔贝尔
123 60 男性 白色的 不是Hisp 上市 3个 1个 0
456 40 女性 黑色的 不是Hisp 私人的 0 2个 0
789 70 女性 白色的 麻麻 私人的 0 0 1个

使用问题中的示例表变量,您可以在加入包含名称的源后执行 pivot。 在此示例中,我使用了值构造,因为没有示例数据。

SELECT p.Patient_ID, p.Age, p.Sex, p.Race, p.Ethnicity, p.Insurance, p.[Michelle Bell], p.[Mike Andrews], p.[Susan Marshal]
  FROM (
        SELECT v.Patient_ID, v.Age, v.Sex, v.Race, v.Ethnicity, v.Insurance, A.Physician, A.Name
          FROM @Visits v
            INNER JOIN (VALUES 
                                ('Phys123', 'Susan Marshal' ),
                                ('Phys456', 'Mike Andrews'),
                                ('Phys789', 'Michelle Bell')
                               )A(Physician, Name)
              ON v.Physician = a.Physician
       ) a
    PIVOT (
           COUNT(a.Physician) FOR a.Name IN ([Susan Marshal],[Mike Andrews],[Michelle Bell])
          ) p                           
患者编号 年龄 性别 种族 种族 保险 米歇尔贝尔 迈克·安德鲁斯 苏珊元帅
123 60 男性 白色的 不是Hisp 上市 0 1个 3个
456 40 女性 黑色的 不是Hisp 私人的 0 2个 0
789 70 女性 白色的 麻麻 私人的 1个 0 0

值得指出的是,您必须显式地向 pivot 提供值。 这可以通过动态 SQL 来完成,但它确实增加了复杂性。 如果您需要包含的名称数量有限,那么对它们进行硬编码可能会更好。

暂无
暂无

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

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