That is an interesting puzzle. Here is another solution using a CTE instead of a loop.
-- Setup
set nocount on
-- Create a table to store the results.
create table Doors
(ID int
,ChosenDoor int
,WinningDoor int
,WinLose as case when ChosenDoor = WinningDoor then 0 else 1 end -- Win = 1, Lose = 0
);
-- Use a CTE to generate 10,000 "contestants" and their chosen/winning doors.
-- If the chosen door equals the winning door the contestant will switch when given the
-- option and lose. Otherwise they will switch to the winning door and win.
with Digits(i)
as (select i
from (select 1 union select 2 union select 3 union select 4 union select 5 union
select 6 union select 7 union select 8 union select 9 union select 0) AS X(i))
insert into Doors(ID, ChosenDoor, WinningDoor)
select (D3.i * 1000 + D2.i * 100 + D1.i * 10 + D0.i) AS seq
,abs(cast(cast(newid() as varbinary) as int)) % 3 + 1 ChosenDoor
,abs(cast(cast(newid() as varbinary) as int)) % 3 + 1 WinningDoor
from Digits as D0, Digits as D1, Digits as D2, Digits as D3
-- Select the total number of winners (1) and losers (0).
selectWinLose
,count(*) Total
from Doors
group by WinLose
-- Clean-up
drop table Doors
set nocount off