2012-05-16 9 views
5

में सामान्य वितरण के साथ संख्याएं कैसे उत्पन्न करें मैं कुछ डेटा बीज करने की कोशिश कर रहा हूं, क्या सामान्य वितरण वक्र का पालन करने वाले SQL सर्वर में संख्याएं उत्पन्न करने के लिए वैसे भी है?एसक्यूएल सर्वर

पसंद है: मैं मतलब, मानक विचलन और गिनती निर्दिष्ट करूंगा और मुझे संख्याओं की सूची मिल जाएगी?

उत्तर

2

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=135026 से उद्धृत आप

CREATE FUNCTION [dbo].[udf_NORMSDIST] 
(
      @x FLOAT 
) 
RETURNS FLOAT 
AS 
/**************************************************************************************** 
NAME: udf_NORMSDIST 
WRITTEN BY: rajdaksha 
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=135026 
DATE: 2009/10/29 
PURPOSE: Mimics Excel's Function NORMSDIST 

Usage: SELECT dbo.udf_NORMSDIST(.5) 


REVISION HISTORY 

Date Developer Details 
2010/08/11 LC Posted Function 


*****************************************************************************************/ 

BEGIN 
DECLARE @result FLOAT 
DECLARE @L FLOAT 
DECLARE @K FLOAT 
DECLARE @dCND FLOAT 
DECLARE @pi FLOAT 
DECLARE @a1 FLOAT 
DECLARE @a2 FLOAT 
DECLARE @a3 FLOAT 
DECLARE @a4 FLOAT 
DECLARE @a5 FLOAT 

--SELECT @L = 0.0 
SELECT @K = 0.0 
SELECT @dCND = 0.0 

SELECT @a1 = 0.31938153 
SELECT @a2 = -0.356563782 
SELECT @a3 = 1.781477937 
SELECT @a4 = -1.821255978 
SELECT @a5 = 1.330274429 
SELECT @pi = 3.1415926535897932384626433832795 

SELECT @L = Abs(@x) 

IF @L >= 30 
BEGIN 
IF sign(@x) = 1 
SELECT @result = 1 
ELSE 
SELECT @result = 0 
END 
ELSE 
BEGIN 
-- perform calculation 
SELECT @K = 1.0/(1.0 + 0.2316419 * @L) 
SELECT @dCND = 1.0 - 1.0/Sqrt(2 * @pi) * Exp([email protected] * @L/2.0) * 
(@a1 * @K + @a2 * @K * @K + @a3 * POWER(@K, 3.0) + @a4 * POWER(@K, 4.0) + @a5 * POWER (@K, 5.0)) 
IF (@x < 0) 
SELECT @result = 1.0 - @dCND 
ELSE 
SELECT @result = @dCND 

END 

RETURN @result 
END 

साथ की कोशिश कर सकते आप स्पष्ट रूप से परिणाम ऑफसेट मतलब बदल सकते हैं और के रूप में नमूना अंक की वांछित संख्या वापस जाने के लिए की जरूरत है पुनरावृत्ति करने के लिए एक समारोह में इस रैप करने के लिए कर सकते हैं। अगर आपको इसके लिए मदद की ज़रूरत है तो मुझे बताएं।

2

यादृच्छिक सामान्य वितरण

UPDATE TABLE 
SET COLUMN = CAST(SQRT(-2*LOG(RAND()))*SIN(2*PI()*RAND(CHECKSUM(NEWID())))as decimal(5,3))  
from TABLE 
+0

आप अपने समाधान एक सा समझा सकते हैं? – damienfrancois

+0

@damienfrancois निश्चित रूप से, मैंने अभी [इस सूत्र] को संशोधित किया है (http://mathworld.wolfram.com/Box-MullerTransformation.html) – AaronConnell

संबंधित मुद्दे