7

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を作成し、文字列内の列の名前を取得し、必要な列を分割することを検討していましたが、このアプローチでは問題が難しくなります。インデックスで列番号を取得すると、作業が楽になると思いました。

4

3 に答える 3

7

いいえ、SELECT節で序数 (数値) の位置を使用することはできません。

ORDER BY序数位置は、句で指定された列に基づいているため、句でのみ使用できますSELECT

于 2011-02-03T05:37:36.413 に答える
4

まず、OMG Poniesが述べたように、列を序数で参照することはできません。これは事故ではありません。SQL 仕様は、DDL または DML の動的スキーマ用に構築されていません。

それを考えると、なぜデータをそのように構造化しているのか疑問に思う必要があります。情報を抽出しようとすると、スキーマと問題のドメインとの間の不一致の兆候が現れます。クエリを記述するのが非常に面倒な場合は、スキーマが設計されたドメインを適切にモデル化していないことを示しています。

ただし、あなたが私たちに言ったことを考えると、別の解決策は次のようなものになるfield_1*field1でしょfield_1 * field_1field_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
于 2011-02-03T06:34:29.737 に答える