Я получил в результате динамического запроса таблицу только с одной строкой, в которой есть 1 столбец + d + n столбцов, поэтому проблема в том, что число 'd' и 'n' является переменным, поэтому я могесть строка с 5,6,7, .. d значениями и 10,11 .... n значениями или более ...
как
Input:
x f1 f2 f3 ... fd Other1 Other2 Other3 ... Othern
10 1.0000 139.0000 60.0000 ... 59.0000 846.0000 30.1000 0.3980 ... 0.398
Если мне нужносделать некоторое исчисление с, скажем, n, f1, Other1 для первого столбца;n, f1, f2, Other1, Other2 для столбца 2, n, f1, f3, Other1, Other3 для третьего столбца ... другой таблицы, например:
Column_1 Column_2 Column_3 ..Column_d
x*(f1*f1)/(Other1*Other1) x*(f1*f2)/(Other1*Other2) x*(f1*f3)/(Other1*Other3)..x*(f1*fn)/(Other1*Othern)
x*(f2*f1)/(Other2*Other1) x*(f2*f2)/(Other2*Other2) x*(f2*f3)/(Other2*Other3)..x*(f2*fn)/(Other2*Othern) ...
...
x*(fd*f1)/(Otherd*Other1) x*(fd*f2)/(Otherd*Other2) x*(fd*f3)/(Otherd*Other3)..x*(fd*fn)/(Otherd*Othern)
Я думал сначала сохранить столбцычто мне нужно во вложенном цикле, и обновлять его, пока я не достигну конца таблицы.но так как мне нужно сделать это d раз, я немного запутался, поэтому мои вопросы:
- Могу ли я использовать курсор для получения результата?
- Могу ли я выбратьвсе переменные в первую очередь, чтобы сделать это?
- Использование сводки должно сделать трюк, Как?
- Не знаю, и главная проблема в том, что входная таблица имеет d динамических столбцов
Я пытаюсь сделать хранимую процедуру, но мне не повезло, динамическое построение SQL-запроса в коде перед выполнением.Заранее спасибо.
Надеюсь, вопрос более понятен.спасибо PS.X - это еще один вход, поэтому он не имеет ничего общего с элементами 'n' в столбцах Other1 ... Othern
-------------- EDIT-----------------
Чтобы сгенерировать входную таблицу из одной строки: я использую динамический запрос для выбора различных полей, так как они являются динамическими, я используюстрока, которая будет заменена позже, поэтому общий код:
SET @template = 'SELECT SUM(1) AS x,{f}, {other} FROM '+ @table_name
--then in some loops I calculate sums, powers, etc...
--so after I replace the strings with cosen queries I replace them like
SET @template = REPLACE(@template, '{f}' , @dynamicStringForf )
SET @template = REPLACE(@template, '{Other}', @dynamicStringForOther )
--Finally I get large query with the objetive I need
--something like:
'SELECT SUM(1) AS x, sum(a+b) as f1,pow(b,c) as f2....,sum(x+y) as Other1 ,pow(y+z) as Other 2... FROM '+ @table_name
the result is a one row with data like:
x f1 f2 f3 ... fd Other1 Other2 Other3 ... Othern
10 1.0000 139.0000 60.0000 ... 59.0000 846.0000 30.1000 0.3980 ... 0.398
Now I have created a new temp table dynamically
--@d could be any number, but at this stage I know it
Set @TempColumn = ''
Set @TempCol = ''
Set @Comma = ''
Set @ColumnNo = 1
Set @SQL = 'Create Table temp ('
WHILE @ColumnNo <= @d Begin
Set @TempColumn =@TempColumn + @Comma + ' Column_' + Cast(@ColumnNo as nvarchar)
Set @SQL =@SQL + @Comma + ' Column_' + Cast(@ColumnNo as nvarchar) + ' FLOAT'
Set @Comma = ','
Set @ColumnNo = @ColumnNo + 1
END
Set @SQL = @SQL + ' )'
EXEC (@SQL) --create temp table
--the result is a new table like:
Column_1 Column_2 Column_3 ... Column_d
Теперь я хочу заполнить ее, что-то вроде:
Column_1 Column_2 Column_3 ..Column_d
x*(f1*f1)/(Other1*Other1) x*(f1*f2)/(Other1*Other2) x*(f1*f3)/(Other1*Other3)..x*(f1*fn)/(Other1*Othern)
x*(f2*f1)/(Other2*Other1) x*(f2*f2)/(Other2*Other2) x*(f2*f3)/(Other2*Other3)..x*(f2*fn)/(Other2*Othern) ...
...
x*(fd*f1)/(Otherd*Other1) x*(fd*f2)/(Otherd*Other2) x*(fd*f3)/(Otherd*Other3)..x*(fd*fn)/(Otherd*Othern)
Любая идея, как это сделать, объединение,курсор, поворот, что может быть лучше