Попробуйте использовать PIVOT
SELECT *
FROM
(
SELECT tn.pat_nm,tn.pat_id,td.pat_day_no,format(td.pat_day_hrs,'HH:mm') d
FROM trentadm.tpat_nm tn
JOIN trentadm.tpat_det td ON td.pat_id=tn.pat_id
) q PIVOT(MAX(d) FOR pat_day_no IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14])) p
И после этого вы можете заменить этикетки
SELECT
pat_nm 'Pattern Name',
pat_id 'Pattern ID',
[1] 'Day 1',
[2] 'Day 2',
[3] 'Day 3',
[4] 'Day 4',
[5] 'Day 5',
[6] 'Day 6',
[7] 'Day 7',
[8] 'Day 8',
[9] 'Day 9',
[10] 'Day 10',
[11] 'Day 11',
[12] 'Day 12',
[13] 'Day 13',
[14] 'Day 14'
FROM
(
SELECT tn.pat_nm,tn.pat_id,td.pat_day_no,format(td.pat_day_hrs,'HH:mm') d
FROM trentadm.tpat_nm tn
JOIN trentadm.tpat_det td ON td.pat_id=tn.pat_id
) q PIVOT(MAX(d) FOR pat_day_no IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14])) p