动态sql中的case by case语句

时间:2015-02-19 23:18:07

标签: sql sql-server tsql dynamic-sql case-when

我有一个名为@Sorter的参数,它传递一个int(1表示按某一组列排序,0表示按另一组列排序)。

在我的动态SQL中,当用户在执行过程时将1传入该参数时,我可以使用它。

' ORDER BY CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List END ASC,
        ''Year'', ''MonthNum'' DESC, i.Item ASC'

问题是当我尝试添加一个案例,当参数从用户传递的值为0时,它开始抱怨。如下:

' ORDER BY CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List END ASC,
           CASE WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END ASC,
            ''Year'', ''MonthNum'' DESC, i.Item ASC'

错误是一个常数。

2 个答案:

答案 0 :(得分:1)

你不需要额外的案例陈述,试试这个:

' ORDER BY CASE ''' + cast(@Sorter as varchar(1))+ ''' WHEN '1' THEN l.List
                                WHEN '0' THEN ''Variance'' END ASC,
            ''Year'', ''MonthNum'' DESC, i.Item ASC'

答案 1 :(得分:0)

你必须在陈述时使用一个案例。

ORDER BY 
     (CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List
           WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END) ASC,
      ''Year'', ''MonthNum'' DESC, i.Item ASC'