• WITH a (PID,VisitType,Rn,RowNo)

    AS (

    SELECT PID,VisitType,Rn

    ,ROW_NUMBER() OVER (PARTITION BY PID,Rn ORDER BY VisitType ASC)

    FROM @PatDev

    ),

    b (PID,MaxRowNo)

    AS (

    SELECT PID,MAX(RowNo)

    FROM a

    GROUP BY PID

    )

    SELECT b.PID

    ,MAX(CASE WHEN c.C = 1 THEN ISNULL(a2.VisitType,a.VisitType) END) AS [Col1]

    ,MAX(CASE WHEN c.C = 2 THEN ISNULL(a2.VisitType,a.VisitType) END) AS [Col2]

    ,MAX(CASE WHEN c.C = 3 THEN ISNULL(a2.VisitType,a.VisitType) END) AS [Col3]

    ,MAX(CASE WHEN c.C = 4 THEN ISNULL(a2.VisitType,a.VisitType) END) AS [Col4]

    FROM b

    JOIN (SELECT R FROM (VALUES (1),(2),(3),(4)) n (R)) r

    ON r.R BETWEEN 1 AND b.MaxRowNo

    CROSS JOIN (SELECT C FROM (VALUES (1),(2),(3),(4)) n (C)) c

    JOIN a ON a.PID = b.PID AND a.RowNo = 1 AND a.Rn = c.C

    LEFT JOIN a a2 ON a2.PID = b.PID AND a2.RowNo = r.R AND a2.Rn = c.C

    GROUP BY b.PID,r.R

    Far away is close at hand in the images of elsewhere.
    Anon.