>> How is your own approach?I use VISA 
DECLARE @m MONEY, @r INTDECLARE @monetarytable TABLE( AMOUNT MONEY ,[1000] INT ,[500] INT ,[100] INT ,[50] INT ,[20] INT ,[10] INT ,[5] INT ,[1] INT ,[.25] INT ,[.05] INT ,LEFTOVER MONEY)INSERT @monetarytable(AMOUNT)SELECT 5525.35UNIONSELECT 9455.99UNIONSELECT 11250.00UPDATE @monetarytable SET @m = AMOUNT ,@r = [1000] = FLOOR(@m/1000.0) ,@m = @m-1000*@r ,@r = [500] = @m/500.0 ,@m = @m-500*@r ,@r = [100] = @m/100.0 ,@m = @m-100*@r ,@r = [50] = @m/50.0 ,@m = @m-50*@r ,@r = [20] = @m/20.0 ,@m = @m-20*@r ,@r = [10] = @m/10.0 ,@m = @m-10*@r ,@r = [5] = @m/5.0 ,@m = @m-5*@r ,@r = [1] = @m/1.0 ,@m = @m-1*@r ,@r = [.25] = @m/.25 ,@m = @m-.25*@r ,@r = [.05] = @m/.05 ,LEFTOVER = @m-.05*@rSELECT * FROM @monetarytable
Edit: added the LEFTOVER columnrockmoose