Sql按案例查询,位值不起作用

时间:2014-02-24 17:32:33

标签: sql sql-server sql-server-2012

尝试以下

order by 

CASE @OrderByUnique
  WHEN '1' THEN asg.total_unique_groupcount
  WHEN '0' THEN asg.total_groupcount
END desc 

order by 

CASE @OrderByUnique
  WHEN 1 THEN asg.total_unique_groupcount
  WHEN 0 THEN asg.total_groupcount
END desc 

但它只有在我使用else的情况下才有效,所以出于某种原因,在我的case语句中我无法将其与true(1)或false(0)

相匹配
order by 
    CASE @OrderByUnique
      WHEN '1' THEN asg.total_unique_groupcount
      WHEN '0' THEN asg.total_unique_groupcount
    ELSE asg.total_groupcount
    END desc 

我的变量在我的函数顶部声明为

ALTER function [dbo].[myFunction] 
(
     @user varchar(30)
    ,@double_entry_flag bit
    ,@OrderByUnique bit = 1
)

1 个答案:

答案 0 :(得分:1)

试试这个:

DECLARE @OrderByUnique bit = 1;

WITH Data (count1, count2) AS 
( 
    SELECT 1, 4
    UNION ALL 
    SELECT 2, 3
    UNION ALL 
    SELECT 3, 2
    UNION ALL 
    SELECT 4, 1
) 
SELECT * FROM Data
ORDER BY CASE WHEN @OrderByUnique = 1 THEN count1 ELSE count2 END DESC
编辑:哦,顺便说一句,你的第一个例子也都有效。只是尝试用

替换我的示例的最后一行
ORDER BY CASE @OrderByUnique WHEN 1 THEN count1 WHEN 0 THEN count2 END DESC

ORDER BY CASE @OrderByUnique WHEN '1' THEN count1 WHEN '0' THEN count2 END DESC

你会得到相同的结果。所以你的问题可能还有别的......