如何从 SQL 服务器中两行的一列中加入数据并将值放在第二列中

How to Join data from one column from two rows in SQL Server and place value in a second column

SELECT 
    staffclass.[Class_DBID],
    [Course_DBID],
    [DistrictClassID],
    [SectionDescr],
    [HomePageURL],
    [AvgCalcCd],
    staffclass.Staff_DBID,
    staff.DistrictStaffID,
    staffclass.RoleCd,
    [Scale_DBID]
FROM
    [studentsys].[dbo].[Class]
INNER JOIN 
    staffclass ON staffclass.Class_DBID = Class.Class_DBID
INNER JOIN 
    staff ON staff.staff_dbid = staffclass.Staff_dbid
INNER JOIN 
    school ON school.School_DBID = staff.school_dbid
WHERE 
    DistrictClassID = 'ONMS03712'

我需要获取 Class_DBID 匹配的数据并生成一行,其中 DistrictStaffID 值位于 'Teacher1' RoleCd 'P'(主要)和 [=25= 的列中], 'Teacher3', 'Teacher4' 对于任何 RoleCd = 'A' 对于(附加)。

您可以生成一个行号,然后对其使用条件聚合

SELECT 
    staffclass.[Class_DBID],
    [Course_DBID],
    [DistrictClassID],
    [SectionDescr],
    [HomePageURL],
    [AvgCalcCd],
    Staff_DBID  = MIN(CASE WHEN staff.RoleCd = 'P' THEN staff.Staff_DBID END),
    Teacher1 = MIN(CASE WHEN staff.rn = 1 THEN staff.DistrictStaffID END),
    Teacher2 = MIN(CASE WHEN staff.rn = 2 THEN staff.DistrictStaffID END),
    Teacher3 = MIN(CASE WHEN staff.rn = 3 THEN staff.DistrictStaffID END),
    Teacher4 = MIN(CASE WHEN staff.rn = 4 THEN staff.DistrictStaffID END)
FROM
    [studentsys].[dbo].[Class]
INNER JOIN (
    SELECT
        staff.staff_dbid,
        staff.DistrictStaffID,
        staffclass.RoleCd,
        rn = ROW_NUMBER() OVER (PARTITION BY staffclass.staff_dbid ORDER BY CASE WHEN staffclass.RoleCd = 'P' THEN 1 ELSE 2 END)
    FROM
        staffclass
    INNER JOIN 
        staff ON staff.staff_dbid = staffclass.Staff_dbid
) staff ON staff.Class_DBID = Class.Class_DBID
INNER JOIN
    school ON school.School_DBID = staff.school_dbid
WHERE 
    DistrictClassID = 'ONMS03712'
GROUP BY
    Class.Class_DBID,
    [Course_DBID],
    [DistrictClassID],
    [SectionDescr],
    [HomePageURL],
    [AvgCalcCd];