Sql server 有关sql server 2005中嵌套CASE语句的问题
这是我的sql,当我试图执行它时,我得到了错误消息一个非布尔类型的表达式,该表达式是在“then”附近预期条件的上下文中指定的。 我不能理解我在哪里犯了错误。所以,请看一下我的完整sql,特别是在我使用嵌套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'
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]