Sql server 2008 如何使用类似“IF”的条件从SQL查询中排除行

Sql server 2008 如何使用类似“IF”的条件从SQL查询中排除行,sql-server-2008,if-statement,conditional-statements,Sql Server 2008,If Statement,Conditional Statements,我有一种感觉,这个答案正盯着我的脸……我就是看不见。这个问题我也遇到过很多次,但我似乎无法找到一个可靠的答案。我需要用一个简单的条件从SQL查询中排除一些行。这是我的密码: IF OBJECT_ID('tempdb..#NextEvent') IS NOT NULL DROP TABLE #NextEvent CREATE TABLE #NextEvent( CaseDisplayNumber VARCHAR(20) , ScheduledDay DATETIME , EventTypeI

我有一种感觉,这个答案正盯着我的脸……我就是看不见。这个问题我也遇到过很多次,但我似乎无法找到一个可靠的答案。我需要用一个简单的条件从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基本上去掉所有在支付日期之后的未来法庭日期。除此之外,我还想展示其他一切。这真的可以帮助我解决未来的问题。我一直在寻找类似的问题,但找不到一个能真正帮助我的答案。除非我没有正确搜索,很可能是这样。我试过,如果,我试过,或者,我试过,这让我有点困惑。该行:

NE.ScheduledDay <= PD.PayDate

行得通,我只需要它更具体一点。

您需要做的第一件事是转换您的逻辑以匹配您引用它的方式。例如,如果您说x需要大于y,那么您的代码应该反映这一点,而不是相反的y需要大于y,这是完美的!非常感谢你。我的数据现在非常完美。我现在要做的就是加快速度!再次感谢你!