Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Miten MSSQL:ssä tehdään funktio, joka laskee annetuista sarakkeista?

Jaska [09.08.2017 13:35:01]

#

Haluaisin tehdä MSSQL:ssä funktion, jolla voisi määrittää kentät ja funktio laskisi näistä sarakkeista tunnusluvun. Esimerkiksi miten tehdään funktio f, joka laskisi alkioista tilastollisen tunnusluvun Cronbachin alfa? Jos vaikka taulussa olisi kentät ky1,...,ky20, ja näistä kaikista haluttaisiin laskea tunnusluku niin funktiota kutsuttaisiin muodossa

f(ky1,ky2,ky3,ky4,ky5,ky6,ky7,ky8,ky9,ky10,ky11,ky12,ky13,ky14,ky15,ky16,ky17,ky18,ky19,ky20)

ja se palauttaisi

DROP PROCEDURE IF EXISTS alpha;
GO
CREATE PROCEDURE alpha
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'library(psych);
    a = tryCatch(alpha(Test), warning = function(w) {alpha(Test,check.keys=TRUE)})
    str(a)'
    , @input_data_1 = N'SELECT
    CAST([ky1] as float) as ky1,
    CAST([ky2] as float) as ky2,
    CAST([ky3] as float) as ky3,
    CAST([ky4] as float) as ky4,
    CAST([ky5] as float) as ky5,
    CAST([ky6] as float) as ky6,
    CAST([ky7] as float) as ky7,
    CAST([ky8] as float) as ky8,
    CAST([ky9] as float) as ky9,
    CAST([ky10] as float) as ky10,
    CAST([ky11] as float) as ky11,
    CAST([ky12] as float) as ky12,
    CAST([ky13] as float) as ky13,
    CAST([ky14] as float) as ky14,
    CAST([ky15] as float) as ky15,
    CAST([ky16] as float) as ky16,
    CAST([ky17] as float) as ky17,
    CAST([ky18] as float) as ky18,
    CAST([ky19] as float) as ky19,
    CAST([ky20] as float) as ky20
    FROM Vuodet'
    , @input_data_1_name = N'Test'
END;

Samoin

f(ky1,ky2,ky3)

palauttaisi

DROP PROCEDURE IF EXISTS alpha;
GO
CREATE PROCEDURE alpha
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'library(psych);
    a = tryCatch(alpha(Test), warning = function(w) {alpha(Test,check.keys=TRUE)})
    str(a)'
    , @input_data_1 = N'SELECT
    CAST([ky1] as float) as ky1,
    CAST([ky2] as float) as ky2,
    CAST([ky3] as float) as ky3,
    FROM Vuodet'
    , @input_data_1_name = N'Test'
END;
f(ky1,ky10,ky20)

palauttaa

DROP PROCEDURE IF EXISTS alpha;
GO
CREATE PROCEDURE alpha
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'library(psych);
    a = tryCatch(alpha(Test), warning = function(w) {alpha(Test,check.keys=TRUE)})
    str(a)'
    , @input_data_1 = N'SELECT
    CAST([ky1] as float) as ky1,
    CAST([ky10] as float) as ky10,
    CAST([ky20] as float) as ky20
    FROM Vuodet'
    , @input_data_1_name = N'Test'
END;
f(ky1,ky10,ky20,huonokentta)

palauttaa virheen.

Vai miten tuollainen funktio, jossa parametrien määrä ei ole vakio, kannattaa toteuttaa?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta