In addition to Solution 1 (I'm not personally a fan of correlated sub-queries)...
You can use (non-correlated) sub-queries in a JOIN ..
SELECT A.col1, A.col2, A.countempid, B.col5
FROM
(
SELECT col1, col2, COUNT(EMPID) AS countempid
FROM table1 GROUP BY col1, col2
) A
INNER JOIN
(
SELECT col1, COUNT(*) as col5 FROM table1 GROUP BY col1
) B ON A.col1=B.col1
ORDER BY A.col1, A.col2
Or you could use
Common Table Expressions[
^]
;WITH CTE1 AS
(
SELECT col1, col2, COUNT(EMPID) AS countempid
FROM table1 GROUP BY col1, col2
), CTE2 AS
(
SELECT col1, COUNT(*) as col5 FROM table1 GROUP BY col1
)
SELECT C1.col1, C1.col2, C1.countempid, C2.col5
FROM CTE1 C1
INNER JOIN CTE2 C2 ON C1.col1=C2.col1
ORDER BY C1.col1, C1.col2
Or my particular favourite using
OVER clause[
^]
SELECT DISTINCT col1, col2, COUNT(EMPID) OVER (PARTITION BY col1, col2) AS countempid,
COUNT(EMPID) OVER (PARTITION BY col1)
FROM table1
ORDER BY col1, col2