2016-04-15 73 views
0

我試圖創建SQL Server中ANOVA F-Test存儲過程(從概念的角度來看純粹的 - 它甚至有可能)SQL服務器 - 聲明的變量(ANOVA)動態量

事情我有最難的是聲明一個未指定數量的變量。我希望我的用戶能夠指定未確定數量的列來執行測試。以下是我的過程如何設置到目前爲止:

CREATE PROCEDURE dbo.ANOVA 
@ColumnList nvarchar(MAX), 
@table nvarchar(MAX), 
@null varchar(5) = 'eq' 
AS 
BEGIN 
    CREATE TABLE #columns (col varchar(250)) 
    INSERT INTO #columns SELECT ItemValue FROM dbo.SplitList(@ColumnList, ',') 
    --SplitList is a table-valued function that splits a comma delimited list into a table. 
    DECLARE @NumVars int, @i int = 0, @TotMean float, @SQL nvarchar(MAX) 
    SELECT @NumVars = COUNT(*) FROM #columns 
END 

這只是我迄今爲止的骨架。在我看來,我有兩種方法來解決這個問題。

使用動態SQL聲明變量,做一個動態的SQL語句整個ANOVA過程:

SELECT @SQL = 
'WHILE ' + CAST(@i AS varchar(50)) + ' < ' + CAST(@NumVars AS varchar) + ' 
BEGIN 
    DECLARE @a' + CAST(@i AS varchar(5)) + ' varchar(50) 
    DECLARE @a' + CAST(@i AS varchar(5)) + 'mean varchar(50) 
    @i = @1 +1 
END 
/* ANOVA stuff goes here */' 

EXEC (@SQL) 

或使用動態SQL變量聲明爲一個表,並從那裏與他們的工作:

IF OBJECT_ID('tempdb..#vars') IS NOT NULL 
DROP TABLE #vars 
CREATE TABLE #vars (vars varchar(250)) 
SELECT @SQL = 
'WHILE ' + CAST(@i AS varchar(50)) + ' < ' + CAST(@NumVars AS varchar) + ' 
BEGIN 
    INSERT INTO #vars VALUES(''@a' + @i +''') 
    @i = @i + 1 
END 
' 

EXEC (@SQL) 
--Declare means, do ANOVA stuff 

我覺得完成這部分將是做ANOVA過程中最困難的部分。我已經完成了1樣本和2樣本t檢驗,我覺得下一步是方差分析。

我不找你們解決整個問題對我來說,剛上手以及如何使用這些變量的工作,也許一些建議

+0

'未指定的數額':爲什麼你不使用*表格*? –

+0

將未指定數量的變量放入表中似乎對我來說是顯而易見的解決方案。 –

+0

是的,但是如果你不知道他們的名字,那麼你將如何處理表中的變量? – Chythe

回答

0

如何創建XML(與列變量# )並將其傳遞給存儲過程並在存儲過程中處理XML。

+0

我還沒有用過那麼多的XML ..但我可以試試看。我覺得可能有一個更簡單的方法來做到這一點。 – Chythe

+0

如何在前端或業務層中獲得數據? 您是否需要.Net端或Store Proc端或兩者的幫助? – Srinika

+0

我實際上會嘗試使用這個遊標。我有一些與他們的經驗,我會給它一個鏡頭。如果這不起作用,我會嘗試做XML。 – Chythe