I would like help adding a UNION to get all the months to a query. I tried adding union in a bunch of spots but just can't get it right.

SELECT MONTH(FirstPublishedToPortal) AS theMonth,
YEAR(FirstPublishedToPortal) AS theYear,
MONTHNAME(FirstPublishedToPortal) AS theMonthName,
COUNT(DISTINCT PONum) AS POCount,
SUM(unconfirmedEmailSent) AS unconfirmedEmailsSent,
( SELECT COUNT(DISTINCT PONum)
FROM POFlags
WHERE unconfirmedEmailSent = 0
AND MONTH(FirstPublishedToPortal) = theMonth
AND YEAR(FirstPublishedToPortal) = theYear
AND VendorNum = '2222'
) AS onTimeConfirmed,
SUM(lateEmailSent) AS lateEmailsSent,
( SELECT COUNT(DISTINCT PONum)
FROM POFlags
WHERE lateEmailSent = 0
AND MONTH(FirstPublishedToPortal) = theMonth
AND YEAR(FirstPublishedToPortal) = theYear
AND VendorNum = '2222'
) AS onTimePOCount
FROM POFlags
WHERE VendorNum = '2222'
AND FirstPublishedToPortal >= '2017-01-08'
GROUP BY theYear DESC, theMonth DESC
ORDER BY FirstPublishedToPortal DESC
Where do the union clauses go in this query? I think there needs to be something like the following code but I don't understand where to put it to work correctly with the GROUP BY or ORDER BY.
(SELECT 1, null, 'January', 0, 0, 0, 0, 0)
UNION
(SELECT 2, null, 'February', 0, 0, 0, 0, 0)
UNION
(SELECT 3, null, 'March', 0, 0, 0, 0, 0)
.
.
(SELECT 12, null, 'December, 0, 0, 0, 0, 0)