动态 sql 中的按案例语句排序
Order by case statement in dynamic sql
我有一个名为 @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'
错误是一个常数。
您不需要额外的 case 语句,试试这个:
' 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'
你必须使用一个 case when 语句。
ORDER BY
(CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List
WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END) ASC,
''Year'', ''MonthNum'' DESC, i.Item ASC'
我有一个名为 @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'
错误是一个常数。
您不需要额外的 case 语句,试试这个:
' 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'
你必须使用一个 case when 语句。
ORDER BY
(CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List
WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END) ASC,
''Year'', ''MonthNum'' DESC, i.Item ASC'