Slovak Sagan made a solo break out of the leading peloton to catch two
escapees in the final 10km before outsprinting Swiss pair Michael Albasini and Silvan Dillier to win the 192.6km third stage from Grosswangen to Rheinfelden.
The peloton, including previous race leader Jurgen Roelandts, arrived three seconds back. But thanks to a time bonus for winning the stage, Sagan moved into the overall lead with a 3sec gap to Belgian Roelandts, who was fifth on the stage.
"I'm very happy, I thank my team," said Sagan.
"It was a stressful day under the rain. Knowing the finish was on a hill I preferred to get ahead."
The win saw Sagan increase his record of stage victories at the Tour of Switzerland to 13.
On Sunday he took sole possession of the record which he had shared with Swiss trio Ferdi Kubler and Hugo Koblet, two of whom raced in the 1950s, and Fabian Cancellara, who won Saturday's opening prologue.
The peloton that arrived behind the three leaders was greatly reduced, with the original bunch breaking up throughout the tough stage raced in wet conditions.
It meant that one of the overall race favourites, Briton Geraint Thomas, moved up into the top 10 – he now sits ninth at 19sec.