0

さて、ここで問題です。

   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句を含むクエリのコメント部分を見てください。必要なときにdrugscreening必要なのは、条件を適用したくない場合と同じようにtrueすべてのレコードが必要なことです。passeddrugtesttrue

編集: CONT.DRUGSCREENINGREQUIREDandが true の場合、 andCONT.BACKGROUNDCHECKREQUIREDでレコードをフィルタリングしたいだけです。それらが真でない場合、 andが真か偽かに関係なく、すべてのレコードが必要です。TECH.PASSEDDRUGTESTTECH.PASSEDBACKGROUNGCHECKTECH.PASSEDDRUGTESTTECH.PASSEDBACKGROUNGCHECK

4

2 に答える 2

0

これらのフラグが独立している場合 (質問に反して、そうあるべきだと私には思われます)、チェックが不要なレコードまたはチェックに合格したレコードを取得できます。つまり、次のようになります。

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

両方のフラグが立てられているかどうかを本当に確認したい場合passedは、次のパターンを使用できます。

WHERE (    CONT.DRUGSCREENINGREQUIRED = 'FALSE' 
        OR CONT.BACKGROUNDCHECKREQUIRED = 'FALSE'
        OR (     TECH.PASSEDDRUGTEST = 'TRUE' 
             AND TECH.PASSEDBACKGROUNGCHECK = 'TRUE'
           )
      )
于 2012-08-16T11:48:38.400 に答える
0

質問を誤解しているかもしれませんが、これだけではいけませんか?

WHERE CONT.DRUGSCREENINGREQUIRED = 'FALSE' OR CONT.DRUGSCREENINGREQUIRED = 'TRUE' AND TECH.PASSEDDRUGTEST = 'TRUE'
于 2012-08-16T10:48:07.063 に答える