【发布时间】: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