One way (perhaps crude) is to have a table of discrete probabilities and then pick the value based on that as well. If I want to generate something between 0 and 5:CREATE TABLE #tmp(Value INT, CumulativeProbability FLOAT);
INSERT INTO #tmp VALUES
(0,15.0),(1,20.0),(3,25),(4,26),(5,100);
SELECT MIN(VALUE) FROM #tmp WHERE CumulativeProbability >= 100*RAND()
DROP TABLE #tmp;

I am giving a 74% probability to 100 in this case, so most of the results would be (should be) 5.