Внутренний номер сотрудника по ID пользователя — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 3: Строка 3:
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
  
<span style="color:red"> ВНИМАНИЕ: У пользователя должен быть "нативный" номер, то есть такой стандартный внутренний номер, в котором только один объект - данный пользователь. Иначе запрос не найдет внутренний номер этого пользователя.  
+
* Запрос находит такой внутренний номер, в котором может быть только один пользователь и несколько внешних номеров и линий.  
 +
* Если в номере больше 1 пользователя или есть внутренние номера, то считается что это номер групповой.
 +
* Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.  
  
 
[[Файл:Внутренний номер по IDuser 001.png|center]]
 
[[Файл:Внутренний номер по IDuser 001.png|center]]
  
  
SELECT TOP 1 @prefix=np.Prefix FROM A_NumberPlan np  
+
SELECT top 1 @prefix=Prefix
INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID AND npa.ExtraId IN
+
FROM (
(SELECT RuleID FROM A_RuleRecords
+
        SELECT COALESCE((SELECT count(*)
  WHERE reactid=@userid AND InnerAddressType=0  
+
                                            FROM A_RuleRecords s_r 
  AND RuleID IN
+
                                              LEFT JOIN A_NumberPlanAction s_npa ON  s_r.ReactID = s_npa.NumID
(SELECT RuleID FROM A_RuleRecords
+
                                              LEFT JOIN A_RuleRecords ss_r ON s_npa.ExtraId = ss_r.RuleId
GROUP BY RuleID HAVING COUNT(*)=1))  
+
                                            WHERE s_r.RuleID = r.RuleID AND (s_r.ReactID IN (SELECT ID FROM A_USERS) OR s_npa.NumID IS NOT NULL)),0) cnt
ORDER BY np.Prefix
+
        , np.Prefix, np.Visible
 +
            FROM A_NumberPlan np  
 +
              INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID  
 +
              JOIN A_RuleRecords r ON r.RuleID = npa.ExtraId AND r.reactid=@userid
 +
                    AND InnerAddressType=0  -- Если только "Внутренние номера"
 +
      ) t
 +
ORDER BY cnt,  Visible DESC
  
 
где
 
где

Версия 12:49, 10 июня 2014

Наверх

SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.

  • Запрос находит такой внутренний номер, в котором может быть только один пользователь и несколько внешних номеров и линий.
  • Если в номере больше 1 пользователя или есть внутренние номера, то считается что это номер групповой.
  • Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.
Внутренний номер по IDuser 001.png


SELECT top 1 @prefix=Prefix FROM (

       SELECT COALESCE((SELECT count(*) 
                                           FROM A_RuleRecords s_r  
                                             LEFT JOIN A_NumberPlanAction s_npa ON  s_r.ReactID = s_npa.NumID 
                                             LEFT JOIN A_RuleRecords ss_r ON s_npa.ExtraId = ss_r.RuleId 
                                           WHERE s_r.RuleID = r.RuleID AND (s_r.ReactID IN (SELECT ID FROM A_USERS) OR s_npa.NumID IS NOT NULL)),0) cnt
       , np.Prefix, np.Visible
           FROM A_NumberPlan np 
             INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID 
             JOIN A_RuleRecords r ON r.RuleID =  npa.ExtraId AND r.reactid=@userid
                   AND InnerAddressType=0  -- Если только "Внутренние номера"
     ) t

ORDER BY cnt, Visible DESC

где

  • @prefix (вых) - содержит внутренний номер пользователя
  • @userid (вх) - ID пользователя


ВНИМАНИЕ: Начиная с версии 2.10 внутренний номер пользователя может быть найден с помощью компонента "Статус объекта"