2016-04-15 7 views
0

Ich versuche, eine ANOVA F-Test gespeicherte Prozedur in SQL Server zu erstellen (rein aus konzeptioneller Sicht? - Ist es überhaupt möglich)SQL Server - eine dynamische Menge von Variablen Deklarieren (ANOVA)

Das, was ich habe am schwierigsten ist es, eine nicht spezifizierte Menge von Variablen zu deklarieren. Ich möchte, dass mein Benutzer eine unbestimmte Anzahl von Spalten angeben kann, um den Test durchzuführen. Hier ist, wie mein Proc ist so weit eingerichtet:

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 

Dies ist nur das Skelett, das ich bisher habe. In meinen Augen habe ich zwei Möglichkeiten, dies zu erreichen.

Verwenden der dynamische SQL-Variablen zu deklarieren und das ganze ANOVA Verfahren in einer dynamischen SQL-Anweisung tun:

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) 

oder verwenden Sie dynamische SQL-Variablen in eine Tabelle zu erklären und von dort mit ihnen arbeiten:

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 

Ich fühle mich wie dieser Teil getan wird der schwierigste Teil der Durchführung der ANOVA-Verfahren sein wird. Ich habe bereits 1-Probe und 2-Probe T-Tests gemacht und ich fühlte mich wie ANOVA der nächste Schritt war.

Ich suche nicht für euch, das ganze Problem für mich zu lösen, nur um loszulegen und vielleicht einige Vorschläge, wie man mit diesen Variablen arbeiten

+0

'Nicht spezifizierter Betrag': Warum verwenden Sie keine * Tabelle * dafür? –

+0

Die unbestimmte Anzahl von Variablen in eine Tabelle zu setzen scheint mir die offensichtliche Lösung zu sein. –

+0

Ja, aber wie würden Sie dann mit den Variablen in der Tabelle arbeiten, wenn Sie ihre Namen nicht kennen? – Chythe

Antwort

0

Wie über eine XML-Erstellung (mit variabler Anzahl der Spalten) und übergeben Sie es an die Stored Procedure und behandeln Sie die XML im Stored Proc.

+0

Ich habe nicht so viel mit XML gearbeitet .. Aber ich kann es versuchen. Ich denke, dass es einen einfacheren Weg geben könnte. – Chythe

+0

Wie haben Sie Ihre Daten im Frontend oder Business-Layer? Benötigen Sie eine Hilfe auf der .Net-Seite oder auf der Store Proc-Seite oder bei beiden? – Srinika

+0

Ich werde tatsächlich versuchen, Cursor dafür zu verwenden. Ich habe ein wenig Erfahrung mit ihnen und ich werde es versuchen. Wenn das nicht funktioniert, werde ich versuchen, XML zu machen. – Chythe