1

您好我有以下 SQL 存储过程查询

@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,那么我要订购的列是“folio”列。

如果@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

要添加 asc/desc:

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

NULL解释一下,这两个命令都将适用,但当@sortorder变量为“ASC”时,第一个命令将始终不变。

于 2013-02-19T17:25:55.190 回答