1

こんにちは、次の SQL Stored Proc Query があります。

@colindex int

SELECT
   di.folio,
   di.name,
   di.region,
   di.amount
FROM datainfo di
WHERE di.isactive = 1
ORDER BY .....@colindex 'where colindex is the index of the column returned

例:

@colindex = 1 の場合、並べ替えたい列は「フォリオ」列です。

@colindex = 4 の場合、注文する列は「金額」列です。

SQLでこれを処理する方法についての手がかりはありますか?

ありがとう。

4

3 に答える 3

3
order by case @colindex when 1 then folio when 2 then ... end
于 2013-02-19T17:25:25.740 に答える
2
@colindex int

SELECT
   di.folio,
   di.name,
   di.region,
   di.amount
FROM datainfo di
WHERE di.isactive = 1
ORDER BY case @colindex  when 1 then di.folio when 4 then di.amount end
于 2013-02-19T17:26:28.067 に答える
1

これが非常に高速かどうかはわかりませんが、次を追加できます。

ORDER BY CASE @colindex 
             WHEN 1 THEN [MyColumn1]
             WHEN 2 THEN [MyColumn2]
             WHEN 3 THEN [MyColumn3]
             WHEN 4 THEN [MyColumn4]
         END

昇順/降順を追加するには:

ORDER BY CASE @sortorder
    WHEN 'ASC' THEN
        CASE @colindex 
            WHEN 1 THEN [MyColumn1]
            WHEN 2 THEN [MyColumn2]
            WHEN 3 THEN [MyColumn3]
            WHEN 4 THEN [MyColumn4]
         END
    END,
    CASE @sortorder
        WHEN 'DES' THEN
        CASE @colindex 
            WHEN 1 THEN [MyColumn1]
            WHEN 2 THEN [MyColumn2]
            WHEN 3 THEN [MyColumn3]
            WHEN 4 THEN [MyColumn4]
         END
    END DESC

説明すると、2 つの順序は両方とも適用されますが、変数が「ASC」のNULL場合、最初の順序は常に適用されます。@sortorder

于 2013-02-19T17:25:55.190 に答える