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。这可以帮助人们帮助你。