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.