枢轴让我很困惑。有人可以帮我理解使用我的例子吗?

时间:2018-01-26 23:55:25

标签: sql-server pivot

这是我正在使用的查询:

select
    p.person_nbr, 
    psm.description,
    m.medication_name,
    StartDate,
    endDate
from person p
    left join patient_medication m
        on p.person_id = m.person_id
    left join patient_status ps 
        on ps.person_id = p.person_id
    left join patient_status_mstr psm 
        on psm.patient_status_id = ps.patient_status_id

它检索此数据:

person_nbr  description medication_name             StartDate   endDate
      47    Intake      Seroquel 300 mg tablet      07/13/2017  01/01/1900
      47    Active      Risperdal 1 mg tablet       10/21/2017  11/21/2017
      47    Active      sertraline 100 mg tablet    10/21/2017  11/21/2017
      271   Active      sertraline 100 mg tablet    11/21/2017  12/26/2017
      271   Active      Risperdal 1 mg tablet       11/21/2017  12/26/2017

我想将数据转换为预定义列。目标是将10个列添加到数据中。 m.medication_name字段将使用MedName1,MedName2,MedName3,MedName4,MedName5的命名约定转入总共5列。相应的日期需要进行类似的分配(MedDate1,MedDate2,MedDate3,MedDate4,MedDate5)。例如:

example of pivoted table

我需要将每个分区(由person_nbr分区)限制为5个总药物和日期对。如果超过5,我需要忽略它们。

我已经尝试过使用枢轴,但还没有接近它的工作。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个不使用PIVOT的解决方案。这可能是一种更优雅的方法,但其可维护性对于每位患者和五种或六种药物的两个属性是易处理的。

请注意,这仅仅是一个示例,我使用[]转义标识符时有点松散,而且最终输出与您的完全匹配(例如MedDate1是{{ 1}}以您的2017-07-13 ...格式化您认为合适的日期。

7/13/2017