我被同事发给我的这个简单问题困扰了。
虽然我从逻辑的角度理解他正在尝试做什么,但我仍然坚持语法。这真让我烦恼。在我读过的任何文档中,我都没有找到类似的东西。下面是他的消息,其中包含最相关的代码块:
嘿(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没有帮助,因为我没有可用的架构信息。这是严格的语法。
我能得到任何帮助。
答案 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)
这实现了一些逻辑,如果它不是非活动状态而且没有被解雇,则表示某些东西是活动的。