Добро пожаловать в S / O, несмотря на то, что вы, кажется, получаете ранний удар ... хотя не переживайте. В будущем попробуйте объяснить простым языком Engli sh, что вы пытаетесь получить, а затем покажите структуры вспомогательных таблиц и образцы данных соответствующих таблиц.
Теперь, похоже, вы пытаетесь получить счет из файла журнала, основанный на данном событии (в данном случае «OUTANSWER»), основанный на каждом типе. Тип на самом деле представляет пользователя (звучит очень странно). Затем мне нужно имя человека для каждого из типов (пользователь). - Или, по крайней мере, что-то вроде этого, а теперь по вашему запросу.
По одному. Вы несколько представили, но изменили событие, используя ссылки таблицы 1 и таблицы 2, которые не соответствуют предоставленным вами образцам.
Что касается данных, у вас есть таблица queue_log с префиксом типа all (в этом примере набора) с «агентом». Это действительно точно? Потому что тогда в вашей таблице агентов у вас просто есть видимый ключ "ID" на основе целых чисел. Если это случай объединения, оно не будет работать хорошо, если вы попытаетесь сравнить целое число со строкой, которую вы должны удалить префикс «Агент», и есть ли другие префиксы для других целей?
Итак, учитывая все эти вещи, которые, я надеюсь, вы сможете дать разъяснения, я постараюсь помочь. Во-первых, подсчет каждого агента для данной вещи ... В этом случае я собираюсь предварительно вырезать «Агент» из строки поля типа, если это действительно префикс для агента.
select
replace( ql.type, 'Agent', '' ) AgentID,
count(*) AgentCount
from
queue_log ql
where
ql.Event = 'OUTANSWER'
group by
replace( ql.type, 'Agent', '' ) AgentID
Это вернет 2 строки. Один для каждой записи Outanswer для разных соответствующих агентов, но при аренде столбец AgentID будет только 6001 и 5003 соответственно, но все равно будет строкой. Теперь вы хотите получить имя человека, поэтому вам нужно присоединиться к таблице агентов. Итак, я сделаю вышеуказанный запрос в качестве основного выбора и назначу ему псевдоним, чтобы его можно было присоединить к таблице агентов, чтобы получить имя
select
PreQuery.AgentID,
PreQuery.AgentCount,
a.Name
from
(select
replace( ql.type, 'Agent', '' ) AgentID,
count(*) AgentCount
from
queue_log ql
where
ql.Event = 'OUTANSWER'
group by
replace( ql.type, 'Agent', '' )) PreQuery
JOIN Agent a
on PreQuery.AgentID = a.agent_number
Теперь, если ваш queue_log имеет префикс Agent + ID, я бы настоятельно рекомендовал разбить его на два столбца, например
QueueID KeySource KeyID Event
1 Agent 6001 OUTANSWER
2 Agent 6002 CONNECT
3 Agent 6001 ABANDON
4 Agent 5003 OUTANSWER
Таким образом, вы можете сохранить KeyID в виде целого числа, а источник идентифицирует, откуда он исходит. В будущем это станет намного проще ...