Solution1 by Christian Graus is very good. In addition to it i'd like to provide another way - using subqueries. Have a look at example:
CREATE TABLE #request (hub_id INT, totalrequest INT)
INSERT INTO #request (hub_id, totalrequest)
VALUES(9, 45),
(20, 55),
(136, 75)
CREATE TABLE #route_header (action1 VARCHAR(30), routid INT, hub_id INT, occ INT)
INSERT INTO #route_header (action1, routid , hub_id, occ)
VALUES('p', 1, 9, 4),
('p', 2, 9, 3),
('p', 3, 9, 2),
('d', 4, 9, 4),
('d', 5, 9, 1),
('p', 6, 20, 3),
('p', 7, 20, 3),
('p', 8, 20, 4),
('p', 9, 20, 4),
('d', 10, 20, 5),
('p', 11, 136, 2),
('p', 12, 136, 1),
('d', 13, 136, 5),
('d', 14, 136, 3),
('d', 15, 136, 4)
SELECT t1.hub_id, t1.totalrequest , t1.Totalroutes, t1.TotalEmployee, FLOOR(t1.TotalEmployee / t1.Totalroutes) AS RealOccupancy,
(SELECT COUNT(action1) FROM #route_header WHERE action1 = 'p' AND hub_id = t1.hub_id) AS PickCount,
(SELECT COUNT(action1) FROM #route_header WHERE action1 = 'd' AND hub_id = t1.hub_id) AS DropCount
FROM (
SELECT r.hub_id, r.totalrequest, COUNT(rh.routid) AS Totalroutes, SUM(rh.occ) AS TotalEmployee
FROM #request AS r INNER JOIN #route_header AS rh ON r.hub_id = rh.hub_id
GROUP BY r.hub_id, r.totalrequest
) AS t1
DROP TABLE #request
DROP TABLE #route_header
Result (as expected):
hub_id to.req. to.rou. to.emp. Re.Occ. PickCo. DropCo.
9 45 5 14 2 3 2
20 55 5 19 3 4 1
136 75 5 15 3 2 3