1

我知道以下是合法的 SQL 查询,但为什么不能在 SQL Server Compact 中解释?(我正在使用 SQL Server Compact 视图)

Select  
   Case AStatus  
      When 1 then 'Success', 'AStatus', 'Expected:1'  
      When 0 then 'Faliure', 'AStatus', 'Recived: 0'    
   end
From Statuses  
Where LocalPath= 'c:\Status  

我得到类似的东西:

查询1:解析查询时出错[Token line number=3, Token line offset=22, Token in Error=,]

当编写如下内容时,它可以工作:

Select  
   Case AStatus  
      When 1 then 'Success'
      When 0 then 'Faliure'  
   end
From Statuses  
Where LocalPath= 'c:\Status  
4

2 回答 2

2

我认为这是从案例中获取三列的唯一有效方法:

Select  
    Case AStatus  
        When 1 then 'Success'
        When 0 then 'Faliure'
    END,
    Case AStatus  
        When 1 then 'AStatus'
        When 0 then 'AStatus'
    END,
    Case AStatus  
        When 1 then 'Expected:1'  
        When 0 then 'Recived: 0'  
    END
From Statuses  
Where LocalPath= 'c:\Status'

编辑:另一种方式。不会更短,但似乎更灵活:

Select  
    Astatus,
    x.*
From Statuses s
CROSS APPLY (
    select 'Success' as c1,'AStatus' as c2,'Expected:1' as c3 where AStatus=1 union all 
    select 'Failure' ,'AStatus','Recived:0' where AStatus=0
) x
Where LocalPath= 'c:\Status'

你会因为让我想出这个而得到 +1,我已经知道我会在哪里使用它:)。

于 2013-10-18T12:00:13.947 回答
1

您的陈述缺少陈述中的ENDCluaseCASE我不知道这是否是唯一的错误尝试第一次

    Select  
    Case AStatus  
    When 1 then 'Success', 'AStatus', 'Expected:1'  
    When 0 then 'Faliure', 'AStatus', 'Recived: 0'  
    END
    From Statuses  
    Where LocalPath= 'c:\Status 
于 2013-10-18T11:52:36.303 回答