Вы можете сделать оператор PIVOT, но это также можно сделать с помощью условного агрегирования с использованием операторов CASE.
SELECT fac.NAME AS FACILITY
, SUM(fac.GROUP1 + fac.GROUP2) AS FAC_COUNT
, SUM(CASE WHEN PROGRAM_ID = 1 THEN 1 ELSE 0 END) AS [PROGRAM 1]
, SUM(CASE WHEN PROGRAM_ID = 2 THEN 1 ELSE 0 END) AS [PROGRAM 2]
, SUM(CASE WHEN PROGRAM_ID = 4 THEN 1 ELSE 0 END) AS [PROGRAM 4]
FROM FACILITY fac
INNER JOIN PROGRAMS pgms ON fac.ID = pgms.FACILITY_ID
WHERE fac.SUBTYPE IN (3,4,5)
Понятно, что это не сработает, если у вас есть Программы, отличные от 1, 2 или 4 без необходимости изменения кода вручную. Чтобы учесть это, вы должны посмотреть на динамический c PIVOT-запрос, обсужденный здесь .