【问题标题】:Syntax for multiple CASE statements and ISNULL() functions in a query查询中多个 CASE 语句和 ISNULL() 函数的语法
【发布时间】:2015-07-22 19:43:57
【问题描述】:

我被一个同事发给我的这个简单问题难住了。

虽然我从逻辑的角度理解他想要做什么,但我还是停留在语法上。这真的让我很烦。在我读过的任何文档中,我都没有真正找到类似的东西。以下是他的消息,其中包含最相关的代码块:


嘿(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 没有帮助,因为我没有可用的架构信息。这是严格的语法。

感谢我能得到的任何帮助。

【问题讨论】:

  • Eww。不要像这样使用“Top 1”。从您的选择中删除子查询并正确执行连接。确实,这里需要架构来更好地理解这个问题......但我认为,如果你正确地进行连接,你将能够根据需要放入尽可能多的“case when”。
  • “当 'OP' 然后 '53OP' 当 'PA' 然后” - 部分是否缺少某些内容?那不可能是有效的 SQL
  • @NWest 这是发送给我的方式。在使用旧代码的地方工作,你一定会看到一些不好的东西。我不能从根本上改变它,只是帮助让它发挥作用。不过我同意你的看法。
  • @JamesZ 就是这样发送给我的。我问了我的消息来源,但没有得到答案。不过你是对的;我只是添加了一些填充物。

标签: sql sql-server syntax


【解决方案1】:

首先,这不需要子查询:

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)

根据实际应该是什么逻辑(“and”或“or”),您可以执行以下操作:

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

这实现了一个逻辑,如果某个东西不是非活动的并且没有被解除,那么它就是活动的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2017-10-31
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多