You should be able to do something like this:
declare @users table(userid int, username varchar(255));
insert into @users values (1, 'sysAdmin');
insert into @users values (2, 'salesUser1');
insert into @users values (3, 'serviceUser1');
insert into @users values (4, 'manager1');
insert into @users values (5, 'salesUser2');
insert into @users values (6, 'serviceUser2');
insert into @users values (7, 'manager2');
declare @roles table(roleid int, rolename varchar(255));
INSERT INTO @roles VALUES (0, 'SystemAdmin');
INSERT INTO @roles VALUES (1, 'Full');
INSERT INTO @roles VALUES (2, 'Update');
INSERT INTO @roles VALUES (3, 'Read');
DECLARE @user_role_map TABLE(userid INT, roleid INT, buid int)
INSERT INTO @user_role_map values (1, 0, 0);
INSERT INTO @user_role_map values (2, 1, 1);
INSERT INTO @user_role_map values (2, 3, 3);
INSERT INTO @user_role_map values (3, 1, 2);
INSERT INTO @user_role_map values (3, 3, 4);
INSERT INTO @user_role_map values (4, 1, 1);
INSERT INTO @user_role_map values (4, 1, 2);
INSERT INTO @user_role_map values (5, 1, 3);
INSERT INTO @user_role_map values (5, 3, 1);
INSERT INTO @user_role_map values (6, 1, 4);
INSERT INTO @user_role_map values (6, 3, 3);
INSERT INTO @user_role_map values (7, 1, 2);
INSERT INTO @user_role_map values (7, 1, 4);
DECLARE @businessunit TABLE(buid int, buidname VARCHAR(255));
INSERT INTO @businessunit VALUES (0, 'IT')
INSERT INTO @businessunit VALUES (1, 'fooSales')
INSERT INTO @businessunit VALUES (2, 'fooService')
INSERT INTO @businessunit VALUES (3, 'barSales')
INSERT INTO @businessunit VALUES (4, 'barService')
--non-admin users
SELECT userid, roleid, buid
FROM @user_role_map
WHERE
roleid > 0 AND buid > 0
UNION ALL
--get admin users and add a full control entry
SELECT userid, 1, BusinessUnits.buid
FROM @user_role_map m
CROSS JOIN(
--use this if you have a businessunit table you can leverage; otherwise,
--you can select distinct buid on role_map where buid > 0
SELECT buid
FROM @businessunit
WHERE buid > 0
) AS BusinessUnits
WHERE
roleid = 0 AND m.buid = 0