1。
select 
      case @SamplingStepDateValue when  'A' then * 
                                  else top 1 * 
      end
From @tbl 2。
。。(已经选好内容,需要排序)
ORDER BY 
   case @SamplingStepDateValue ='A'then
RemediationId
, TYear_seq DESC
, WTHRGH_Seq DESC
, CONST_Seq DESC
, RECD_Seq DESC
, CLEAN_Seq DESC
, REF_Seq DESC
   case @SamplingStepDateValue ='E' then
        DATESAM_DATE ASC
   case @SamplingStepDateValue ='L' then
        DATESAM_DATE DESC
   

解决方案 »

  1.   

    CASE
    计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 
    CASE 搜索函数计算一组布尔表达式以确定结果。 
    两种格式都支持可选的 ELSE 参数。 语法
    简单 CASE 函数:CASE input_expression
        WHEN when_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        ENDCASE 搜索函数:CASE
        WHEN Boolean_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        END参数
    input_expression是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft® SQL Server™ 表达式。 WHEN when_expression使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。 n占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。THEN result_expression当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。result expression 是任意有效的 SQL Server 表达式。 ELSE else_result_expression当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。WHEN Boolean_expression使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。 结果类型
    从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。 第一个语法上可以。但是你的*,TOP 1 * 不是有效的SQL表达式。
    第二个语法都不对。
      

  2.   

    case when 的用法不要和decode的用法混淆了:
    1、case when condition then value1 else value2 end
    2、decode(expression, item1, value1, item2, value2, ..., defautlValue)
      

  3.   

    * 和 top 1 * 不是一个值,不能这么写。
    第一个等价于:if(@SamplingStepDateValue='A')
    select * from @tb1
    else
    select top 1 * from @tb1第二个可以采用字符串动态拼接。
      

  4.   

    select  
      case @SamplingStepDateValue when 'A' then *  
      else top 1 *  
      end
    From @tbl  
    -->不能用*,要具体一列
      

  5.   

    case when then else end 相当于三目运算,只能是单个值,不能是数据集
      

  6.   


    declare @sqltext varchar(128)
    select @sqlText='select '+case when @SamplingStepDateValue='A' then '*' else 'top 1 *' end +' from @tbl'
    exec(@sqlText)
      

  7.   

    你的第二个是语法问题,你可以看看,第一个也是我前两天正在纠结的问题,然后我换个写法,用if exists来写的,这里我总算明白了,为什么,我的当时写法错了,因为我查询的结果是一个数据集
      

  8.   

    1.case when 只能是case when 判断表达式 then 结果表达式 .... else end
    2.每一个order by 的结果都要单独用一封闭的case when else end
      不能一个case通杀.
      

  9.   

    一个查询中order by 比较的字段或表达式只能是固定的,不能用一个case 来order by 不固定的字段.
      

  10.   

    你这明显应该用动态SQL来写。