У меня есть следующий случай, в котором TSQL
процедура немного медленная, и я ищу замену, возможно, в R
:
I want to do a cross tabulation over example table:
surveyID QuestionID AnswerID
1000 1 1
1000 2 3
1000 3 2
1000 4 1
1001 1 3
1001 2 2
1001 3 1
1001 4 3
И чтобы получить результаты вроде:
QuestionIDx QuestionIDy AnswerIDx AnswerIDy Frequancy
1 1 1 2 x
1 1 1 3 x
1 1 2 3 x
.....
Я в основном оставляю себе присоединение к таблице самостоятельно на surveyID
, а затем я использую функции R table
или xtabs
для получения частот.
INSERT INTO #CrossTabResults([ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy], [Frequency])
EXECUTE sp_execute_external_script
@language =N'R',
@script=N'
OutputDataSet <- data.frame(table(InputDataSet$ProtoQuestionIDx, InputDataSet$ProtoQuestionIDy, InputDataSet$AnswerPosIDx, InputDataSet$AnswerPosIDy))
', @input_data_1 = N'SELECT [SurveyInstanceID], [ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy] FROM #JoinedSurveys'
OR
INSERT INTO #CrossTabResults([ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy], [Frequency])
EXECUTE sp_execute_external_script
@language =N'R',
@script=N'
OutputDataSet <- data.frame(xtabs(~ ProtoQuestionIDx + ProtoQuestionIDy + AnswerPosIDx + AnswerPosIDy, data=InputDataSet))
', @input_data_1 = N'SELECT [SurveyInstanceID], [ProtoQuestionIDx], [ProtoQuestionIDy], [AnswerPosIDx], [AnswerPosIDy] FROM #JoinedSurveys'
Я неуверен, что это правильный подход, а также он не улучшает скорость выполнения.Я ищу самое быстрое решение.Любая помощь приветствуется.