Sql server 有关sql server 2005中嵌套CASE语句的问题

Sql server 有关sql server 2005中嵌套CASE语句的问题,sql-server,Sql Server,这是我的sql,当我试图执行它时,我得到了错误消息一个非布尔类型的表达式,该表达式是在“then”附近预期条件的上下文中指定的。 我不能理解我在哪里犯了错误。所以,请看一下我的完整sql,特别是在我使用嵌套case的地方,并告诉我要纠正什么 SELECT [bbajobs].[jid], [Add Dates], CASE WHEN 1 then 'Yes'

这是我的sql,当我试图执行它时,我得到了错误消息一个非布尔类型的表达式,该表达式是在“then”附近预期条件的上下文中指定的。

我不能理解我在哪里犯了错误。所以,请看一下我的完整sql,特别是在我使用嵌套case的地方,并告诉我要纠正什么

SELECT                 
        [bbajobs].[jid],                
        [Add Dates],    
    CASE WHEN 1 then 'Yes'      
        CASE WHEN 0 then 
            CASE WHEN job_flow_state.no_fault_found   = 1 THEN 'No fault found'         
            CASE WHEN job_flow_state.unable_to_repaired  = 1 THEN 'Unable to repair'       
            CASE WHEN job_flow_state.Repair_Not_Requested = 1 THEN 'Repair Not Requested'               
            ELSE 'N/A'  
        END  
    END AS [Repaired]
    FROM   bbajobs            
        LEFT JOIN ourfeedback                
        ON bbajobs.jid = ourfeedback.jid                
        INNER JOIN job_flow_state                
        ON bbajobs.jid = job_flow_state.jid                
        WHERE CONVERT(VARCHAR(8), bbajobs.jobshippeddate, 112) >='20140117'               
        AND CONVERT(VARCHAR(8), bbajobs.jobshippeddate, 112) <='20140117' AND bbajobs.jobstate IN ('DONE')                 
        AND bbajobs.jobtype NOT LIKE '%warranty%'                
        AND job_flow_state.repaired = 1             
  AND (ltrim(rtrim(ourfeedback.Rating))='' OR ltrim(rtrim(ourfeedback.Rating))='N/A') AND [bbajobs].[accountreference] IN                
  (SELECT accountref FROM ourfeedback where           
   CONVERT(VARCHAR(8), ourfeedback.adddates, 112) >='20140117' AND CONVERT(VARCHAR(8), ourfeedback.adddates,112) <= '20140117'            
  )

您有太多的
CASE
s-您只需要在内部嵌套中
s时使用
。您还需要打开谓词,即当“what”是
1
0
时。最后,你应该考虑如果内部情况不匹配会发生什么。

i、 e:


我将重写嵌套的case语句,如下所示:

CASE WHEN 1 then 'Yes'      
     ELSE            
     CASE WHEN job_flow_state.no_fault_found = 1 THEN 'No fault found'         
          WHEN job_flow_state.unable_to_repaired = 1 THEN 'Unable to repair'       
          WHEN job_flow_state.Repair_Not_Requested = 1 THEN 'Repair Not Requested'               
          ELSE 'N/A'  
     END  
END AS [Repaired]

您应该在案例陈述中指定
等于1或0的值。就像当Column=1时的
情况,然后是“Yes”
实际上我给出的sql是动态sql。所以我正在更新我的sql,请看一看。谢谢
CASE SomeColumn 
     WHEN 1 then 'Yes'      
     WHEN 0 then 
        CASE WHEN job_flow_state.no_fault_found   = 1 THEN 'No fault found'
             WHEN job_flow_state.unable_to_repaired  = 1 THEN 'Unable to repair'
             WHEN job_flow_state.Repair_Not_Requested = 1 THEN 'Repair Not Requested'               
             ELSE 'Oops'
        END
     ELSE 'N/A'  
   END AS [Repaired];
CASE WHEN 1 then 'Yes'      
     ELSE            
     CASE WHEN job_flow_state.no_fault_found = 1 THEN 'No fault found'         
          WHEN job_flow_state.unable_to_repaired = 1 THEN 'Unable to repair'       
          WHEN job_flow_state.Repair_Not_Requested = 1 THEN 'Repair Not Requested'               
          ELSE 'N/A'  
     END  
END AS [Repaired]