2012-06-06 4 views
0

У меня есть две таблицы tbl_DaysWeeksMonths (Левая таблица) и tbl_Telephony (Правая таблица). tbl_DaysWeeksMonths имеет запись каждого дня в году со столбцами (Row_Date/Week/Month), в то время как tbl_Telephony имеет данные о телефонии для сотен агентов в день со столбцами (row_date/agent/calls/talk time) (Примечание: у каждого агента только записи за 5-6 дней недели, а не каждый день).Доступ к запросу

Я хочу присоединиться к двум таблицам, чтобы каждый агент имел запись для каждого дня недели, независимо от того, принимали ли они вызов на день или нет. Я хочу отображать пустые записи (за исключением поля даты) в течение нескольких дней, которые консультанты не принимали. Например:

## Date ##   ## Agent ##   ## Calls ##  ## Talk Time ## 

1. 26/05/2012  |  James  |   40  |   560 
2. 27/05/2012  |  James  |     | 
3. 28/05/2012  |  James  |   34  |   456 
4. 29/05/2012  |  James  |     | 
5. 30/05/2012  |  James  |   40  |   643 
6. 31/05/2012  |  James  |   36  |   345 
7. 01/06/2012  |  James  |   31  |   160 

Я пытаюсь использовать приведенный ниже код, но я не думаю, что это правильно. Любые предложения по использованию лучшего кода. Пожалуйста помоги.

SELECT tbl_DaysWeeksMonths.Row_Date, 
     [tbl_Telephony].Consultant, 
     [tbl_Telephony].i_acdtime 
FROM tbl_DaysWeeksMonths 
LEFT JOIN [tbl_Telephony] 
ON tbl_DaysWeeksMonths.Row_Date = [tbl_Telephony].row_date; 
+0

Вы должны использовать кнопку формата кода '{}' для более аккуратного макета. – Fionnuala

+0

Ваш SQL выглядит хорошо для меня, что с ним не так с вашей точки зрения? – Fionnuala

ответ

0

Шаг 1 - Если у вас есть таблица (скажем, с именем Consultants), который содержит список каждого отдельного консультанта, создать запрос (например, с именем Consultant Days), который генерирует все возможные комбинации дней и консультантов. Это может выглядеть примерно так:

SELECT [Consultants].Consultant, tbl_DaysWeeksMonths.Row_Date 
FROM [Consultants], tbl_DaysWeeksMonths; 

Если вы не имеете Consultants таблицу, вы можете заменить его с запросом, который выбирает различных консультантов, перечисленных в tbl_Telephony. Другими словами, вы можете создать Consultantsзапрос, который выглядит примерно так:

SELECT DISTINCT Consultant FROM [tbl_Telephony]; 

Шаг 2 - Создание запроса, внешние соединения tbl_Telephony к Consultant Days. Это может выглядеть примерно так:

SELECT [Consultant Days].Row_Date, [Consultant Days].Consultant, [tbl_Telephony].i_acdtime 
FROM [Consultant Days] 
LEFT JOIN [tbl_Telephony] 
ON [Consultant Days].Consultant = [tbl_Telephony].Consultant 
AND [Consultant Days].Row_Date = [tbl_Telephony].row_date; 

Это также предполагает, что row_date значения в tbl_Telephony соответствуют Row_Date значения в tbl_DaysWeeksMonths - другими словами, что row_date значения в tbl_Telephony целые дни (то есть, не содержат компонент времени дня). Это также предполагает, что значения i_acdtime в tbl_Telephony - это общее время разговора для данного консультанта и дня (в отличие от времени разговора для данного вызова). Предположительно, есть еще одна колонка в tbl_Telephony, которая даст общее количество талонов для данного консультанта и день, который вы могли бы добавить к запросу, чтобы получить столбец «Звонки», в котором вы сказали, что хотите получить свой вопрос.

0

Вы также можете использовать этот запрос.

SELECT tbl_DaysWeeksMonths.Row_Date, [tbl_Telephony].Consultant, [tbl_Telephony].i_acdtime 

FROM tbl_DaysWeeksMonths 

LEFT OUTER JOIN [tbl_Telephony] ON tbl_DaysWeeksMonths.Row_Date = [tbl_Telephony].row_date; 
+0

В MS Access «Left Join» совпадает с «Left Outer Join». – Fionnuala

+0

нормально, я написал запрос в sql-сервере. спасибо, что сообщили мне. –

Смежные вопросы