【问题标题】:top 1 case in select statement on TSQL [closed]TSQL 上的 select 语句中的前 1 个案例 [关闭]
【发布时间】:2013-05-02 11:51:27
【问题描述】:

我对此查询有疑问。我该如何解决这个问题:

select (select case top 1 STATUS 
       when 'Inprocess' then 'Processing' 
       when 'Inworkbin' then 'Waiting In Draft' 
       end 
    from ICS_EMAIL_CONNECTIONS_TRX A    
    where A.SESSIONID = B.SESSIONID 
    and STATUS <> 'Completed'
    order by A.CREATE_DATE desc) as LAST_STATUS 

我收到此错误:

关键字“top”附近的语法不正确。

有什么建议吗?

【问题讨论】:

    标签: sql tsql case top-n


    【解决方案1】:

    试试:

    select top 1 case STATUS
    

    而不是

    select case top 1 STATUS 
    

    【讨论】:

    • 所有答案都是正确的,但我应该选择其中一个作为正确答案:) 谢谢大家
    【解决方案2】:

    您不需要嵌套选择。

    select top 1 case STATUS 
                 when 'Inprocess' then 'Processing' 
                 when 'Inworkbin' then 'Waiting In Draft' 
                 end LAST_STATUS
    from ICS_EMAIL_CONNECTIONS_TRX A    
    where A.SESSIONID = B.SESSIONID 
    and STATUS <> 'Completed'
    order by A.CREATE_DATE desc;
    

    虽然这可以返回 0 行,而正确编写 TOP 1 的原始表单将始终返回一行,即使值为 NULL。

    【讨论】:

      【解决方案3】:
      select (select top 1 (case STATUS 
         when 'Inprocess' then 'Processing' 
         when 'Inworkbin' then 'Waiting In Draft' 
         end) 
      from ICS_EMAIL_CONNECTIONS_TRX A    
      where A.SESSIONID = B.SESSIONID 
      and STATUS <> 'Completed'
      order by A.CREATE_DATE desc) as LAST_STATUS 
      

      【讨论】:

        【解决方案4】:

        更正大小写和顶级关键字

        select (select top 1 case STATUS 
               when 'Inprocess' then 'Processing' 
               when 'Inworkbin' then 'Waiting In Draft' 
               end 
            from ICS_EMAIL_CONNECTIONS_TRX A    
            where A.SESSIONID = B.SESSIONID 
            and STATUS <> 'Completed'
            order by A.CREATE_DATE desc) as LAST_STATUS 
        

        【讨论】:

          【解决方案5】:
          select top 1 * from (select case STATUS 
                 when 'Inprocess' then 'Processing' 
                 when 'Inworkbin' then 'Waiting In Draft' 
                 end 
              from ICS_EMAIL_CONNECTIONS_TRX A    
              where A.SESSIONID = B.SESSIONID 
              and STATUS <> 'Completed'
              order by A.CREATE_DATE desc) as LAST_STATUS 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-20
            • 2021-03-24
            • 1970-01-01
            • 2014-02-08
            • 1970-01-01
            • 2012-08-04
            • 1970-01-01
            • 2012-12-23
            相关资源
            最近更新 更多