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
我需要计算类似的东西  (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
现在您的查询如下所示:
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
| 归档时间: | 
 | 
| 查看次数: | 43692 次 | 
| 最近记录: |