"Brandon was really good tonight -- he played aggressive basketball," McMillan said. "He was so good in the pick-and-roll and that's been our other option after Zach."
Randolph added 20 points and 12 rebounds for the Blazers, who beat Utah for the first time in their last six tries. Ime Udoka had 15 points.
Mehmet Okur had 25 points and eight rebounds to lead Utah, which saw its six-game win streak end.
Roy made 11 of 15 shots, missing his season high by one.
Portland led by 12 with just 6:02 left, but Utah cut the lead to 101-100 after Okur hit a deep 3-pointer with 7.2 seconds remaining. Randolph made two free throws at 6.3 seconds, and Okur missed a 3 with three seconds left. But the ball went out off Portland, setting up Okur for a final 3 try, which he missed badly.
Williams strained his left groin in the Rookie-Sophomore Challenge game All-Star weekend. Boozer, averaging 22.1 points and 11.8 rebounds per game, missed his eighth game with a hairline fracture of his fibula.
"We had two guys out tonight but you can't use that as an excuse," Utah coach Jerry Sloan said. "Roy was the difference. He got whatever he wanted tonight."
Okur's selection as an injury replacement to the All-Star team over Randolph was controversial with Randolph's teammates, who pointed out that he was averaging almost six points and three rebounds more than Okur.
Okur, whose stepped up play has contributed to Utah's going 6-2 without Boozer, had stretches of cold shooting, and finished 9-of-20 from the field.
Randolph's stats were right around his season average, but he had to work for them. Utah led 38-30 in the first half and McMillan decided the offense had to go through Roy.
"Nate said, 'Right now they are doing a good job taking the paint away from Zach, so we need you to open it up more.' Zach's been doing it all year and I'm happy to do it for him tonight," Roy said.
The game was tied 52-all at halftime, but the Jazz stumbled out of the gates in the first half, missing seven of their first eight shots, with Portland going on a 10-2 run.
Portland led by six at the end of the third and held to the lead. Roy scored to give Portland a 88-79 advantage and then hit a 3 the next time down.
The Blazers were up 101-96 with 17 seconds left, but they made it harder on themselves after getting a technical foul for their second delay of game. Fisher made the foul shot and Okur cut the lead to one with his 24-footer.
Reserve Dan Dickau had 11 points and five assists for Portland.
- Portland expects to have Sergio Rodriguez back for Friday's game against Memphis. The rookie point guard has missed eight games with ankle injury.
- The Blazers last beat Utah on April 17, 2005.
- The Jazz's win streak was the second-longest of the season. They won eight-straight from Nov. 10-24.