SQL 分组在一起,这样数据就不会重复

SQL grouping together so data does not repeat

在 table 中有数据,并尝试查询它,以便数据读取例如像 Motrin |毫克 | 25 | 4 |天|疼痛,排成一列。从图像中...我将它们全部放在“答案”栏下。我的查询已将它们全部显示出来……但它重复了数据。任何人都可以帮助将其分组到 DrilldownQuestionID 下吗?

下面是我创建的示例数据:

PracticeID PatientID ParentPageID ParentPageNumber QuestionID DrilldownQuestionID DrilldownAnsRecordID EncounterID Answer
1 111111 48 5 1475 2091 1 encounter1 Tylenol
1 111111 48 5 1475 2092 1 encounter1 mg
1 111111 48 5 1475 2093 1 encounter1 500
1 111111 48 5 1475 2094 1 encounter1 3
1 111111 48 5 1475 2095 1 encounter1 day
1 111111 48 5 1475 2096 1 encounter1 Headache
1 111111 48 5 1475 2091 2 encounter1 Motrin
1 111111 48 5 1475 2092 2 encounter1 mg
1 111111 48 5 1475 2093 2 encounter1 25
1 111111 48 5 1475 2094 2 encounter1 4
1 111111 48 5 1475 2095 2 encounter1 day
1 111111 48 5 1475 2096 2 encounter1 Pain

下面是我的查询;

    select distinct j.Answer as Name, 
    n.Answer as Dosage,
    k.Answer as [Dosage Unit], 
    o.Answer as [How Many],
    l.Answer as [How Often], 
    m.Answer as [Taken For]
from
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID  
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2091
    where a.EncounterID = @EncounterID) as j
        join
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID  
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2093
    where a.EncounterID = @EncounterID) as n
        on j.EncounterID = n.EncounterID
        join
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID 
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2092
    where a.EncounterID = @EncounterID) as k
        on n.encounterID = k.EncounterID
        join
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID  
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2094
    where a.EncounterID = @EncounterID) as o
        on k.EncounterID = o.EncounterID
        join
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID 
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2095
    where a.EncounterID = @EncounterID) as l
        on o.encounterID = l.EncounterID
        join
    (select isnull(a.[Answer],'') as Answer, 
        a.EncounterID 
    from C_ItemDrillDown c join D_AWVAnswers a 
        on c.ItemDrilldownID = a.DrilldownQuestionID 
        and a.QuestionID = 1475 
        and a.DrilldownQuestionID = 2096
    where a.EncounterID = @EncounterID) as m
        on l.encounterID = m.EncounterID

我想要的结果是:

Name Dosage Dosage Unit How Many How Often Taken For
Tylenol 500 mg 3 day Headache
Motrin 25 mg 4 day Pain

所以看起来你在 straight-forward 枢轴之后,类似于以下内容:

select 
  max(case when DrilldownQuestionID = 2091 then Answer end) [Name],
  max(case when DrilldownQuestionID = 2092 then Answer end) [Dosage Unit],
  max(case when DrilldownQuestionID = 2093 then Answer end) Dosage,
  max(case when DrilldownQuestionID = 2094 then Answer end) [How Many],
  max(case when DrilldownQuestionID = 2095 then Answer end) [How Often],
  max(case when DrilldownQuestionID = 2096 then Answer end) [Taken For]
from t
group by DrilldownAnsRecordID;

我已经省略了多余的(针对问题的)列,如果您需要使用它们,您也会group-by。

结果:

Demo Fiddle