查询中多个CASE语句和ISNULL()函数的语法

时间:2015-07-22 19:43:58

标签: sql sql-server syntax

我被同事发给我的这个简单问题困扰了。

虽然我从逻辑的角度理解他正在尝试做什么,但我仍然坚持语法。这真让我烦恼。在我读过的任何文档中,我都没有找到类似的东西。下面是他的消息,其中包含最相关的代码块:

  嘿(TRose),这是一个难以思考的问题。这是一个mssql查询,我有它   当我选择它作为参数时,当前隐藏“非活动”方   但我遗漏了'被解雇'并需要将其添加到声明中   行为与'不活跃'相同:

SELECT
CaseName = justice.dbo.fnFormatFullNameFMLSByNameID(cp.nameid),
CurrentKnownName = justice.dbo.fnFormatFullNameFMLSByPartyID(cp.partyid),
CasePartyAtty =  justice.dbo.fnCasePartyLeadAttorney(cp.caseid,cp.partyid),
cpc.casepartyconnid,
PartyActive = (select top 1  case isnull(inactive ,0)
when 0 then 'YES'
else 'NO'
end
from justice.dbo.CasePartyConnStat cps
where cps.CasePartyConnID = cpc.CasePartyConnID
order by cps.CasePartyConnStatID desc)
FROM  justice.dbo.ClkCaseHdr ct 
when 'OP' then '53OP'
when 'PA' then '53PA'
join justice.dbo.CaseAssignHist cah on cah.CaseAssignmentHistoryID = ct.CaseAssignmentHistoryIDCur
join justice.dbo.CaseParty cp on cp.caseid = ct.caseid
join justice.dbo.CasePartyConn cpc on cpc.CasePartyId = cp.casePartyid 
and BaseConnKy not in ('AT') 
WHERE ct.caseid = @CaseID

我在SQL方面很不错,但我根本不知道答案。 SQLFiddle没有帮助,因为我没有可用的架构信息。这是严格的语法。

我能得到任何帮助。

1 个答案:

答案 0 :(得分:3)

首先,这不需要子查询:

PartyActive = (select top 1  case isnull(inactive ,0)
when 0 then 'YES'
else 'NO'
end

只需使用并明确逻辑:

PartyActive = (case when inactive = 0 or inactive is null then 'YES'
                    else 'NO'
               end)

取决于逻辑应该是什么(“和”或“或”),你可以做:

PartyActive = (case when inactive = 0 or inactive is null then 'YES'
                    when dismissed = 0 or dismissed is null then 'YES'
                    else 'NO'
               end)

这实现了一些逻辑,如果它不是非活动状态而且没有被解雇,则表示某些东西是活动的。