2012-03-13 18 views
0

我有一個「AcctMgr_Flag」,指定一個人作爲客戶經理。這在表格Company_Team上。如果我將參數@acctmgr作爲「true」發送,我只想返回其中@member是客戶經理的活動。如果@acctmgr不正確,我不在乎AcctMgr_Flag是否爲真。標誌參數無法正常工作(SQL)

SO_Activity中的每個Activity都有一個指定member_recid的「Assigned_To」列。 Company_Team中的每個成員都有一個AcctMgr_Flag和Company_RecID。 v_rpt_Member中的每個成員都有一個member_recid和一個Company_recid。

這裏是我的代碼

SELECT v_rpt_Company.Company_Name, SO_Activity.Subject, SO_Activity.Notes, 
     SO_Activity.Date_Closed, SO_Activity.Last_Update, v_rpt_Member.Member_ID, 
     v_rpt_ActivityType.SO_Activity_Type_Desc, 
     v_rpt_ActivityStatus.SO_Act_Status_Desc 
FROM v_rpt_Company 
LEFT OUTER JOIN SO_Activity 
    ON v_rpt_Company.Company_RecID = SO_Activity.Company_RecID 
LEFT OUTER JOIN v_rpt_Member 
    ON SO_Activity.Assign_To = v_rpt_Member.Member_ID 
LEFT OUTER JOIN Company_Team 
    ON v_rpt_Member.Member_RecID = Company_Team.Member_RecID AND 
    v_rpt_Company.Company_RecID = Company_Team.Company_RecID 
LEFT OUTER JOIN v_rpt_ActivityType 
    ON SO_Activity.SO_Activity_Type_RecID=v_rpt_ActivityType.SO_Activity_Type_RecID 
LEFT OUTER JOIN v_rpt_ActivityStatus 
    ON SO_Activity.so_act_status_recid = v_rpt_ActivityStatus.SO_Act_Status_RecID 
WHERE (Company_Team.AcctMgr_Flag = 
     CASE WHEN @acctmgr = 'true' THEN 1 ELSE Company_Team.AcctMgr_Flag END) AND 
     (SO_Activity.Assign_To = @member) AND 
     (v_rpt_ActivityStatus.SO_Act_Status_Desc = 
     CASE WHEN @act_status IS NULL 
      THEN v_rpt_ActivityStatus.so_act_status_desc ELSE @act_status END) AND 
     (v_rpt_Company.Company_RecID = 
     CASE WHEN @company = '' THEN v_rpt_Company.Company_RecID ELSE @company END) AND 
     (SO_Activity.Last_Update >= CONVERT(datetime, @date_start, 101)) AND 
     (SO_Activity.Last_Update <= CONVERT(datetime, @date_end, 101)) 
GROUP BY v_rpt_Company.Company_Name, SO_Activity.Subject, SO_Activity.Notes, 
     SO_Activity.Date_Closed, SO_Activity.Last_Update, v_rpt_Member.Member_ID, 
     v_rpt_ActivityType.SO_Activity_Type_Desc, 
     v_rpt_ActivityStatus.SO_Act_Status_Desc 
ORDER BY v_rpt_Company.Company_Name, SO_Activity.Last_Update DESC 

回答

2

而不是

(Company_Team.AcctMgr_Flag = CASE WHEN @acctmgr = 'true' THEN 1 ELSE Company_Team.AcctMgr_Flag END) 

將這個

(@acctmgr != 'true' or Company_Team.AcctMgr_Flag = 1) 
+0

絕對正確的。謝謝。 – 2012-03-13 18:44:24