在 SQL 服务器中合并相似的行

Combining Similar Rows in SQL Server

我已经为此搜索了解决方案,但未能找到。我是新手,正在尝试合并不太重复的行。我已经尝试了 DISTINCTJOIN 的知识,但此时我已经完全筋疲力尽了...

我的结果是这样的:

我正在努力:

我的查询如下所示:

Select Distinct
    '' As 'Sendout Acc ID',
    r.ACC_ID As 'Pending Acc ID',
    r.PAT_ID As 'Patient ID',
    Concat (pa.L_NAME, ', ', pa.F_NAME) As 'Patient Name',
    Convert (VarChar, pa.BIRTH, 101) As 'Patient DoB',
    Case
        When (pa.GENDER = 'M') Then 'Male'
        When (pa.GENDER = 'F') Then 'Female'
    End 'Gender',
    Convert (VarChar, r.DRAW_DATE, 101) As 'Collection Date',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6600') Then 'Ordered'
    End 'SMC Cardiac Troponin-I',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6601') Then 'Ordered'
    End 'SMC Endothelin',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6602') Then 'Ordered'
    End 'SMC Interleukin-6',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6603') Then 'Ordered'
    End 'SMC Interleukin-17A',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6604') Then 'Ordered'
    End 'SMC Interleukin-10',
    Case
        When (rp.PANEL_ID Is Null) Then ''
        When (rp.PANEL_ID = '6605') Then 'Ordered'
    End 'SMC TNF-alpha',
    Case 
        When (rp.PANEL_ID Is Null) Then '' 
        When (rp.PANEL_ID = '6531') Then 'Ordered' 
    End 'Leptin' 
From 
    LD..LD1.REQUISITIONS r 
Join 
    LD..LD1.PATIENTS pa On r.PAT_ID = pa.PAT_ID 
Left Join 
    LD..LD1.REQ_PANELS rp On rp.ACC_ID = r.ACC_ID 
Where 
    (rp.PANEL_ID = 6600 or rp.PANEL_ID = 6601 or rp.PANEL_ID = 6602 or 
     rp.PANEL_ID = 6603 or rp.PANEL_ID = 6604 or rp.PANEL_ID = 6605 or 
     rp.PANEL_ID = 6531) 
    And rp.DEL_FLAG = 'F' 
    And ((rp.CREATED_DATE > @StartDate And rp.CREATED_DATE < @EndDate And r.CREATED_BY <> ('-1')) 
    Or (r.RECEIVED_DATE > @StartDate And r.RECEIVED_DATE < @EndDate And r.CREATED_BY = ('-1'))) 
    And r.ACC_ID Not In (Select ACC_ID From LD..LD1.VW_NOTPATIENTS) 
Order By 
    r.ACC_ID Asc

如有任何帮助,我们将不胜感激。谢谢。

您可以通过将您的查询放在下面来进行分组:

    Select [sendout Acc ID], [Pending Acc ID], [Patient ID], [Patient Name], [Patient DOB], Gender, [Collection Date],
    max([SMC Cardiac Troponin-I]), max([SMC Endothelin]) ...
    from (
    your query .....
    ) 
    group by [sendout Acc ID], [Pending Acc ID], [Patient ID], [Patient Name], [Patient DOB], Gender, [Collection Date]

在子查询中删除查询中的 Order by 并将其放在 group by 之后

明智地使用 MAX()GROUP BY 将为您提供所需的东西:

Select Distinct
    '' As 'Sendout Acc ID',
    r.ACC_ID As 'Pending Acc ID',
    r.PAT_ID As 'Patient ID',
    Concat (pa.L_NAME, ', ', pa.F_NAME) As 'Patient Name',
    Convert (VarChar, pa.BIRTH, 101) As 'Patient DoB',
    Case
        When (pa.GENDER = 'M') Then 'Male'
        When (pa.GENDER = 'F') Then 'Female'
    End 'Gender',
    Convert (VarChar, r.DRAW_DATE, 101) As 'Collection Date',
    MAX(
        Case
            When (rp.PANEL_ID = '6600') 
                Then 'Ordered'
            ELSE ''
        End 
        ) 'SMC Cardiac Troponin-I',
    MAX(
        Case
            When (rp.PANEL_ID = '6601') 
                Then 'Ordered'
            ELSE ''
        End 
        ) 'SMC Endothelin',
    MAX(
        Case
            When (rp.PANEL_ID = '6602') 
                Then 'Ordered'
            ELSE ''
        End 
        ) 'SMC Interleukin-6',
    MAX(
        Case
            When (rp.PANEL_ID = '6603') 
                Then 'Ordered'
            ELSE ''
        End 
        ) 'SMC Interleukin-17A',
    MAX(
        Case
            When (rp.PANEL_ID = '6604') 
                Then 'Ordered'
            ELSE ''
        End 
        ) 'SMC Interleukin-10',
    MAX(
        Case
            When (rp.PANEL_ID Is Null) Then ''
            When (rp.PANEL_ID = '6605') Then 'Ordered'
        End 
        ) 'SMC TNF-alpha',
    MAX(
        Case 
            When (rp.PANEL_ID Is Null) Then '' 
            When (rp.PANEL_ID = '6531') Then 'Ordered' 
        End 
        ) 'Leptin' 
From 
    LD..LD1.REQUISITIONS r 
Join 
    LD..LD1.PATIENTS pa On r.PAT_ID = pa.PAT_ID 
Left Join 
    LD..LD1.REQ_PANELS rp On rp.ACC_ID = r.ACC_ID 
Where 
    (rp.PANEL_ID = 6600 or rp.PANEL_ID = 6601 or rp.PANEL_ID = 6602 or 
     rp.PANEL_ID = 6603 or rp.PANEL_ID = 6604 or rp.PANEL_ID = 6605 or 
     rp.PANEL_ID = 6531) 
    And rp.DEL_FLAG = 'F' 
    And ((rp.CREATED_DATE > @StartDate And rp.CREATED_DATE < @EndDate And r.CREATED_BY <> ('-1')) 
    Or (r.RECEIVED_DATE > @StartDate And r.RECEIVED_DATE < @EndDate And r.CREATED_BY = ('-1'))) 
    And r.ACC_ID Not In (Select ACC_ID From LD..LD1.VW_NOTPATIENTS) 
GROUP BY 
    r.ACC_ID,
    r.PAT_ID,
    Concat (pa.L_NAME, ', ', pa.F_NAME),
    Convert (VarChar, pa.BIRTH, 101),
    Case
        When (pa.GENDER = 'M') Then 'Male'
        When (pa.GENDER = 'F') Then 'Female'
    End,
    Convert (VarChar, r.DRAW_DATE, 101)
Order By 
    r.ACC_ID Asc