Sql 带条件的WHERE子句

Sql 带条件的WHERE子句,sql,Sql,好,问题是 SELECT CTE.TECHNICIANID, SUM(TLEVEL) AS TLEVEL, TECH.PASSEDDRUGTEST, TECH.PASSEDBACKGROUNGCHECK, TECH.FIRSTNAME, TECH.LASTNAME, CM.CITYID, CM.ADDRESS, CM.EMAIL, CM.PHONENUMBER, CM.ZIPCODE, CNTRY.COUNTRYNAME, SM.STATENAME, C

好,问题是

   SELECT CTE.TECHNICIANID, SUM(TLEVEL) AS TLEVEL, TECH.PASSEDDRUGTEST, TECH.PASSEDBACKGROUNGCHECK, TECH.FIRSTNAME, TECH.LASTNAME, 
        CM.CITYID, CM.ADDRESS, CM.EMAIL, CM.PHONENUMBER, CM.ZIPCODE, CNTRY.COUNTRYNAME, SM.STATENAME,
         CM.LATITUDE, CM.LONGITUDE FROM CTE
        INNER JOIN TECHNICIAN TECH ON CTE.TECHNICIANID = TECH.TECHNICIANID 
        INNER JOIN SERVICEORDER SO ON SO.SERVICEORDERID = @SERVICEORDERID
        INNER JOIN CONTRACT CONT ON SO.CONTRACTID = CONT.CONTRACTID
        INNER JOIN CONTACTMASTER CM ON CM.CONTACTID = TECH.CONTACTID
        INNER JOIN COUNTRYMASTER CNTRY ON CM.COUNTRYID = CNTRY.COUNTRYID
        INNER JOIN STATEMASTER SM ON SM.STATEID = CM.STATEID
        --WHERE CONT.DRUGSCREENINGREQUIRED = CASE CONT.DRUGSCREENINGREQUIRED  WHEN 'TRUE' THEN TECH.PASSEDDRUGTEST END AND
        --CONT.BACKGROUNDCHECKREQUIRED = CASE CONT.BACKGROUNDCHECKREQUIRED WHEN 'TRUE' THEN TECH.PASSEDBACKGROUNGCHECK END
        GROUP BY CTE.TECHNICIANID, TECH.PASSEDDRUGTEST, TECH.PASSEDBACKGROUNGCHECK,CM.LATITUDE, TECH.FIRSTNAME, TECH.LASTNAME, 
        CM.CITYID, CM.ADDRESS, CM.EMAIL, CM.PHONENUMBER, CM.ZIPCODE, CNTRY.COUNTRYNAME, SM.STATENAME, CM.LONGITUDE ORDER BY TLEVEL DESC
查看带有where子句的查询中的注释部分,我想要的是当
药物筛选
需要
true
时,我想要
passeddrugtest
的所有记录为
true
,否则我不想应用任何条件


编辑:当
CONT.DRUGSCREENINGREQUIRED
CONT.BACKGROUNDCHECKREQUIRED
为真时,我只想用
TECH.PASSEDDRUGTEST
TECH.passedbackgroundcheck
过滤记录。如果它们不是真的,我想要所有的记录,不管
TECH.PASSEDDRUGTEST
TECH.passedbackgroundcheck
是真是假。

也许我误解了这个问题,但你能不能不这样做

WHERE CONT.DRUGSCREENINGREQUIRED = 'FALSE' OR CONT.DRUGSCREENINGREQUIRED = 'TRUE' AND TECH.PASSEDDRUGTEST = 'TRUE'

如果这些标志是独立的(与问题相反,但在我看来应该是独立的),您可以检索不需要检查或检查通过的记录,简而言之如下:

WHERE (CONT.DRUGSCREENINGREQUIRED = 'FALSE' OR TECH.PASSEDDRUGTEST = 'TRUE')
  AND (CONT.BACKGROUNDCHECKREQUIRED = 'FALSE' OR TECH.PASSEDBACKGROUNGCHECK = 'TRUE')
如果您真的想检查两个标志都出现时的
已通过
状态,则可以使用此模式:

WHERE (    CONT.DRUGSCREENINGREQUIRED = 'FALSE' 
        OR CONT.BACKGROUNDCHECKREQUIRED = 'FALSE'
        OR (     TECH.PASSEDDRUGTEST = 'TRUE' 
             AND TECH.PASSEDBACKGROUNGCHECK = 'TRUE'
           )
      )

不要忘记标记您的RDBMS。这可以帮助人们帮助你。