Во-первых, как указано OMG Ponies , вы не можете ссылаться на столбцы по их порядковому положению. Это не случайность. Спецификация SQL не построена для динамической схемы ни в DDL, ни в DML.
Учитывая это, я должен задаться вопросом, почему ваши данные структурированы так, как вы. Признак несоответствия между схемой и проблемным доменом проявляется при попытке извлечь информацию. Когда запросы невероятно громоздки для написания, это указывает на то, что схема неправильно моделирует домен, для которого она была разработана.
Однако, как бы то ни было, учитывая то, что вы сказали нам, альтернативное решение будет примерно таким: (я предполагаю, что field_1*field1
должен был быть field_1 * field_1
или field_1
в квадрате или Power( field_1, 2 )
)
Select 1 As Sequence, field_1 As [Field], Sfield_1 As [SField], Sfiled_1 As [SFiled]
Union All Select 2, field_2, Sfield_2, Sfiled_2
...
Union All Select n, field_n, Sfield_n, Sfiled_n
Теперь ваш запрос выглядит так:
With Inputs As
(
Select 1 As Sequence, field_1 As [Field], Sfield_1 As [SField], Sfiled_1 As [SFiled]
Union All Select 2, field_2, Sfield_2, Sfiled_2
....
)
, Results As
(
Select Case
When Sequence = 1 Then Power( [Field], 2 ) - ( [SField] * [SFiled] )
Else 1 / Power( [Field], 2 ) - ( [SField] * [SFiled] )
End
As Result
From Inputs
)
Select Exp( Sum( Log( Result ) ) )
From Results