cMi*_*nor 6 sql t-sql sql-server ordinal sql-server-2008
有没有办法在SQL Server的存储过程中通过索引访问列?
目的是计算大量列.我正在阅读关于游标的内容,但我不知道如何应用它们.
让我解释一下我的问题:
我有一排像:
field_1 field_2 field_3 field_4 ...field_d Sfield_1 Sfield_2 Sfield_3...Sfield_n
1 2 3 4 d 10 20 30 n
Run Code Online (Sandbox Code Playgroud)
我需要计算类似的东西 (field_1*field1) - (Sfield_1* Sfiled_1) / more...
因此结果存储在表列中d次.
所以结果就是一张d column * d row桌子.
由于列数是可变的,我正在考虑制作动态SQL,在字符串中获取列的名称并拆分我需要的列,但这种方法使问题更难.我认为通过索引获取列号可以使生活更轻松.
首先,正如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
Run Code Online (Sandbox Code Playgroud)
现在您的查询如下所示:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43692 次 |
| 最近记录: |