如何从类似于“ IF”条件的SQL查询中排除行

希瑟

我感觉这个答案正盯着我...我只是看不到它。我也曾多次遇到这个问题,但似乎无法为这个问题找到一个可靠的答案。我只需要简单的条件就可以从SQL查询中排除一些行。这是我的代码:

IF OBJECT_ID('tempdb..#NextEvent') IS NOT NULL DROP TABLE #NextEvent
CREATE TABLE #NextEvent(

  CaseDisplayNumber VARCHAR(20)
, ScheduledDay DATETIME
, EventTypeID INT
, EventType VARCHAR(50)
, EventResult VARCHAR(50)
, MatterTypeID INT
, RowNum INT

)
INSERT INTO #NextEvent
SELECT CC.CaseDisplayNumber
    ,SD.ScheduledDay 
    ,SE.EventTypeID EventTypeID
    ,ETC.EventType EventType
    ,ERC.EventResult 
    ,MTC.MatterTypeID 
    ,ROW_NUMBER() OVER(PARTITION BY CC.CaseDisplayNumber ORDER BY SD.ScheduledDay DESC)

FROM CourtCase CC
LEFT JOIN calendar.CaseAssociateEvent CCAE ON CCAE.CourtCaseID = CC.CourtCaseID
LEFT JOIN calendar.CaseEventHeader CEH ON CEH.CaseEventHeaderID = CCAE.CaseEventHeaderID
LEFT JOIN calendar.ScheduledDay SD ON SD.CaseEventHeaderID = CEH.CaseEventHeaderID
LEFT JOIN calendar.ScheduledEvent SE ON SE.CaseEventHeaderID = CEH.CaseEventHeaderID
LEFT JOIN calendar.ScheduledResult SR ON SR.ScheduledEventID = SE.ScheduledEventID
LEFT JOIN calendar.EventResultCodes ERC ON ERC.EventResultID = SR.EventResultID
LEFT JOIN calendar.MatterTypeCodes MTC ON MTC.MatterTypeID = CEH.MatterTypeID
LEFT JOIN calendar.EventTypeCodes ETC ON ETC.EventTypeID = SE.EventTypeID

ORDER BY CC.CaseDisplayNumber
OPTION (MAXDOP 2)

IF OBJECT_ID('tempdb..#ChargeDispo') IS NOT NULL DROP TABLE #ChargeDispo
CREATE TABLE #ChargeDispo(

  CaseDisplayNumber VARCHAR(20)
, Charge VARCHAR(20)
, ChargeClass VARCHAR(5)
, DispositionCD VARCHAR(2)
)
INSERT INTO #ChargeDispo
 SELECT DISTINCT CC.CaseDisplayNumber
            ,CCD.ARSCode Charge
            ,CCC.ChargeClass ChargeClass
            ,DC.DispositionCD Disposition


FROM CourtCase CC
JOIN CaseAction CA ON CA.CourtCaseID = CC.CourtCaseID
JOIN PartyCaseActionRole PCAR ON PCAR.CaseActionID = CA.CaseActionID
JOIN Charge C ON C.PartyCaseActionRoleID = PCAR.PartyCaseActionRoleID
JOIN ChargeActivity CAY ON CAY.ChargeID = C.ChargeID AND CAY.ChargeStatusID = 1
JOIN ChargeCodes CCD ON CCD.ChargeCodeID = CAY.ChargeCodeID 
JOIN ChargeClassCodes CCC ON CCC.ChargeClassID = CCD.ChargeClassID 
LEFT JOIN ChargeDisposition CD ON CD.ChargeActivityID = CAY.ChargeActivityID
LEFT JOIN DispositionStatusCodes DSC ON DSC.DispositionStatusID = CD.DispositionStatusID 
LEFT JOIN DispositionCodes DC ON DC.DispositionID = CD.DispositionID

WHERE DSC.DispositionStatusID = 1

ORDER BY CCC.ChargeClass
OPTION (MAXDOP 2)

SELECT DISTINCT CC.CaseDisplayNumber CaseNumber
               ,CC.FileDate FileDate
               ,EN.FullName Defendant
               ,CD.ChargeClass Class
               ,CD.DispositionCD DispositionID
               ,NE.EventType EventType
               ,NE.ScheduledDay ScheduledDay
               ,NE.EventResult EventResult
               ,PD.PayDate DueDate
               ,fnGetFinancialBalance(FP.financialpartyid) Balance

FROM CourtCase CC
JOIN CaseAction CA ON CA.CourtCaseID = CC.CourtCaseID AND CC.CaseStatusID = 1
JOIN PayDate PD ON PD.CaseActionID = CA.CaseActionID AND PD.EndDate IS NULL
JOIN PartyCaseActionRole PCAR ON PCAR.CaseActionID = CA.CaseActionID AND PCAR.PartyRoleID = 4
JOIN financial.FinancialParty FP ON FP.PartyID = PCAR.PartyID
JOIN Party P ON P.PartyID = PCAR.PartyID
JOIN PartyRoleCodes PRC ON PRC.PartyRoleID = PCAR.PartyRoleID AND PRC.PartyRoleID = 4
JOIN Entity E ON E.EntityID = P.EntityID
JOIN EntityName EN ON EN.EntityID = E.EntityID
JOIN #ChargeDispo CD ON CD.CaseDisplayNumber = CC.CaseDisplayNumber 
JOIN #NextEvent NE ON NE.CaseDisplayNumber = CC.CaseDisplayNumber AND NE.RowNum = 1

WHERE 
NE.ScheduledDay <= PD.PayDate
AND (CD.ChargeClass = 'CV' OR CD.ChargeClass = 'PK')
AND (CD.DispositionCD = '11' OR CD.DispositionCD = '12' OR CD.DispositionCD = '21' OR     CD.DispositionCD = '22')
AND fnGetFinancialBalance(FP.financialpartyid) > 0

ORDER BY PD.PayDate 
OPTION (MAXDOP 2)  

我的麻烦是在上一个WHERE语句中。我不确定它是否也需要在那里。我的结果几乎是完美的,如果NE.MatterTypeID = 3,并且NE.ScheduledDay比PD.PayDate更大,我只需要除去行(基本上除去支付日期之后的所有将来法院日期)。除此之外,我想展示其他所有内容。这确实可以帮助我解决将来的查询。我一直在寻找类似的问题,但找不到真正可以帮助我的答案。除非我搜索不正确,否则很可能是这种情况。我已经尝试过IF,曾经尝试过OR,或者已经尝试过CASE(这让我有些困惑)。该行:

NE.ScheduledDay <= PD.PayDate

可以,我只需要更具体一点即可。

ps2goat

您需要做的第一件事是转换逻辑以匹配您引用它的方式。例如,如果您说“ x需要大于y”,则您的代码应反映出这一点,而不是相反(“ y必须小于等于x”)。这只是有助于澄清。

您的情况将是

Where NOT(NE.MatterTypeID = 3 and NE.ScheduledDay > PD.PayDate) AND --...

其次,您的问题可能是datevsdatetime问题。如果您的日期是datetime值,则需要通过强制转换为日期来获取时间数据。预定日期可能是11/5/2014 8:00 PM,而付款日期是11/5/2014 8:00 am从表面上看,您期望它们是相同的,但是时间值可能会让您失望。

date如果您永远不会使用时间值,建议将列类型更改为这样一来,您就无需再花时间在以后的查询中了。如果您无法执行此操作,则可以将其转换为日期以使日期与时间无关:

Where NOT(NE.MatterTypeID = 3 and CAST( NE.ScheduledDay as date) > CAST(PD.PayDate as date) ) AND --...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章