Eren Derdiyok struck a hat-trick as the Swiss grabbed a first win over their cross-border rivals, who were without their Bayern Munich stars, for the first time in 56 years.
Derdiyok shocked Germany with a double on 21 and 23 minutes and while Mats Hummels pulled a goal back on half-time the Swiss striker completed his hat-trick on 50 minutes.
Germany twice pulled goals back again, through Andre Schurrle (64) and Marco Reus (72) but on each occasion the Swiss had a reply thanks to Stephan Lichtsteiner (67) and Admir Mehmedi (77).
Joachim Low was without eight Bayern players, rested after they reached last weekend's Champions League final, but the Germany boss still fielded a strong line-up including Per Mertesacker, Lukas Podolski and Miroslav Klose.
World and European champions Spain eased to a 2-0 win over Serbia following second-half goals from Adrian Lopez and Santi Cazorla in Saint Gallen.
A makeshift Spain needed the inspiration of substitute Adrian, who headed in Jesus Navas' teasing cross on 64 minutes, before he was brought down by Branislav Ivanovic for Cazorla's penalty soon after.
Euro 2012 co-hosts Poland grabbed a 1-0 win over Slovakia, Damien Perquis deciding the contest on 30 minutes, while the Republic of Ireland won by the same score at home to Bosnia-Herzegovina.
Shane Long's 78th-minute header ensured Giovanni Trapattoni side would head off to their training base in Italy with a 13-game unbeaten run to boost confidence.
Denmark were comfortably beaten 3-1 by Brazil with Hulk netting a double.
The damage was done before half-time with the Porto man on target either side of a Niki Zimling own goal. Nicklas Bendtner grabbed a consolation for the Danes on 71 minutes.
Cristiano Ronaldo was unable to inspire Portugal, before being subbed after 72 minutes, as they played out a goalless draw with Macedonia.
Holland suffered a surprise 2-1 defeat to Bulgaria in Amsterdam after a last-minute winner from substitute Illiyan Mitsanski.
Robin van Persie, who was partnered by Klaas Jan Huntelaar up front in a near full-strength Oranje team, opened the scoring after 45 minutes.
But Ivelin Popov equalised with a 50th-minute penalty, after Rafael van der Vaart handled in the area, before Mitsanski won it.
England crowned new manager Roy Hodgson's first game in charge with a 1-0 win over Norway in Oslo.
Ashley Young's strike after nine minutes was enough to give Hodgson, brought in to replace Fabio Capello, a winning start ahead of Euro 2012.
Czech Republic needed an injury-time winner from David Lafata to beat Israel 2-1. Veteran striker Milan Baros' 17th-minute penalty had been cancelled out by Itay Schecter on half-time.
There was also late drama as Greece drew 1-1 with Slovenia. Vasilis Torosidis' eighth-minute goal looked like it might be enough, but in a hectic ending Jasmin Kurtic levelled before Greece substitute Panagiotis Kone saw red.
Saturday's International Friendly Results
Poland 1-0 Slovakia
Portugal 0-0 Macedonia
Czech Republic 2-1 Israel
Greece 1-1 Slovenia