Я прочитал другие вопросы, и ответы, похоже, не исправляют мою ситуацию. У меня есть таблица названий компаний и таблица деятельности, связанной с этими компаниями.
Мне нужно посчитать количество действий в указанном диапазоне дат и вернуть 0, если таковых нет. Мне также нужно получить дату последней активности (даже если она выходит за пределы указанного диапазона дат).
Я использую LEFT OUTER JOIN
, я пробовал ISNULL()
(хотя, как он может проверить, если он нулевой, если он не существует?), Я не уверен, куда идти дальше.
Вот что у меня есть:
SELECT v_rpt_Company.Company_Name, COUNT(DISTINCT SO_Activity.SO_Activity_Recid) as touches, MAX(SO_Activity.Date_Entered) As lasttouch
FROM v_rpt_Member LEFT OUTER JOIN
Company_Team ON v_rpt_Member.Member_RecID = Company_Team.Member_RecID LEFT OUTER JOIN
v_rpt_Company ON Company_Team.Company_RecID = v_rpt_Company.Company_RecID LEFT OUTER JOIN
SO_Activity ON v_rpt_Company.Company_RecID = SO_Activity.Company_RecID
WHERE (Company_Team.AcctMgr_Flag = 1) AND (v_rpt_Member.Member_ID = @member) 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
ORDER BY v_rpt_Company.Company_Name ASC,lasttouch DESC,touches DESC
Это окончательный ответ: (Спасибо всем)
SELECT a.touches, a.name,b.lasttouch
FROM (
SELECT v_rpt_Company.Company_Name as name,
COUNT(DISTINCT SO_Activity.SO_Activity_Recid) as touches
FROM v_rpt_Company
LEFT OUTER JOIN Company_Team ON Company_Team.Company_RecID = v_rpt_Company.Company_RecID AND Company_Team.AcctMgr_Flag = 1
LEFT OUTER JOIN v_rpt_Member ON v_rpt_Member.Member_RecID = Company_Team.Member_RecID
LEFT OUTER JOIN SO_Activity ON v_rpt_Company.Company_RecID = SO_Activity.Company_RecID AND ((SO_Activity.Last_Update >= CONVERT(datetime, @date_start, 101)) AND ( SO_Activity.Last_Update <= CONVERT(datetime, @date_end, 101)))
WHERE v_rpt_Member.Member_ID = @member
Group By v_rpt_Company.Company_Name ) As a
LEFT OUTER JOIN
(SELECT MAX(SO_Activity.Date_Entered) As lasttouch, v_rpt_Company.Company_Name as name
FROM v_rpt_Company
LEFT OUTER JOIN Company_Team ON Company_Team.Company_RecID = v_rpt_Company.Company_RecID AND Company_Team.AcctMgr_Flag = 1
LEFT OUTER JOIN v_rpt_Member ON v_rpt_Member.Member_RecID = Company_Team.Member_RecID
LEFT OUTER JOIN SO_Activity ON v_rpt_Company.Company_RecID = SO_Activity.Company_RecID
WHERE v_rpt_Member.Member_ID = @member
GROUP BY v_rpt_Company.Company_Name) as b
ON a.name = b.name