Функция IIF в Access SQL

Я пытаюсь написать оператор IIF, чтобы вернуться к определенным должностям в моем запросе.

Однако, когда я запускал свой код, этот столбец даже не возвращался в созданную мной таблицу. Я посмотрел в Интернете, и кажется, что это правильный синтаксис. Я что-то упустил, из-за чего он не возвращает этот столбец?

IIF ([w.Job_Title] = "Sales Pro" OR [w.Job_Title] = "Services Pro" OR [w.Job_Title] = "Universal Pro" OR [w.Job_Title] = "Fulfillment Pro", "JobTitle", NULL),

Первоначально у меня был оператор WHERE в конце моего запроса, но это, похоже, привело к тому, что мои другие данные были неточными, поэтому я подумал, что этот способ IIF будет лучше.

Ниже приведен полный запрос:

SELECT cal.FiscalYear,
       cal.FiscalQuarter,
       cal.FiscalMonth,
       cal.FiscalWeekNumber,
       Format(w.Day, "Dddd") AS DayOfWeek,
       cal.Day AS CalendarDay,
       w.Day,
       c.SegStart,
       c.SPLITNAME AS SkillName,
       w.Site,
       w.Campaign,
       w.Manager,
       w.Supervisor,
       IIF ([w.Job_Title] = "Sales Pro"
            OR [w.Job_Title] = "Services Pro"
            OR [w.Job_Title] = "Universal Pro"
            OR [w.Job_Title] = "Fulfillment Pro", "JobTitle", NULL),
       w.EmployeeNumber AS SalesID,
       w.ACDID,
       c.CallID,
       w.Employee,
       c.Caller_Name AS cms_EmployeeName,
       c.Answerer_Name AS cms_ProEmployeeName,
       c.Answered,
       c.AcwTime,
       c.Agt_Released AS AgentReleased,
       c.AnsHoldTime,
       c.AnsLogin,
       c.Calling_Pty AS CallingParty,
       c.Conference,
       c.ConsultTime,
       c.Dialed_Num AS DialedNumber,
       c.DispIVector,
       c.DispSplit,
       c.DispVDN,
       c.Duration,
       c.Disposition,
       c.Held,
       c.HoldABN AS AbanOnHold,
       c.OrigLogin,
       c.QueueTime,
       c.RingTime,
       c.TalkTime,
       c.Transferred,
       c.VDN2,
       c.VDN3,
       c.VDN4,
       c.VDN5
FROM (t_wfm AS w
      INNER JOIN t_cms AS c ON (c.CALLING_PTY = w.ACDID)
        AND (Format(c.SEGSTART, "Short date") = Format(w.[Day], "Short date")))
INNER JOIN tbl_Calendar AS cal ON cal.Day = w.Day;

person Jenna Terral    schedule 24.07.2018    source источник
comment
Можете ли вы предоставить небольшую выборку данных и ожидаемых результатов?   -  person G Cadogan    schedule 24.07.2018
comment
Я ожидаю, что названия должностей вернут только те, что указаны выше. В выборке данных этот столбец вообще не возвращается.   -  person Jenna Terral    schedule 24.07.2018
comment
Как задать хороший вопрос по SQL. Демонстрационные данные и ожидаемый результат гораздо полезнее, чем текстовое описание. - Также, пожалуйста, опубликуйте полный запрос.   -  person Andre    schedule 24.07.2018
comment
См. полный запрос выше   -  person Jenna Terral    schedule 24.07.2018
comment
Запрос - это всего лишь один для извлечения данных из двух таблиц, единственное, что я пытаюсь заставить его сделать, - это отфильтровать, чтобы просто получить определенные названия должностей.   -  person Jenna Terral    schedule 24.07.2018


Ответы (1)


Вы не указали псевдоним столбца.

Столбец, скорее всего, там, но с заголовком вроде Expr1 или что-то в этом роде.

Я думаю, что вы хотите получить фактический заголовок, а не константу "JobTitle":

   IIF ([w.Job_Title] = "Sales Pro"
        OR [w.Job_Title] = "Services Pro"
        OR [w.Job_Title] = "Universal Pro"
        OR [w.Job_Title] = "Fulfillment Pro", [w.Job_Title], NULL) AS JobTitle,

Изменить

Если вы хотите вернуть только строки, содержащие эти заголовки, проверка выполняется в предложении WHERE. Тогда IIf() не нужен.

WHERE ([w.Job_Title] = "Sales Pro"
        OR [w.Job_Title] = "Services Pro"
        OR [w.Job_Title] = "Universal Pro"
        OR [w.Job_Title] = "Fulfillment Pro")
person Andre    schedule 24.07.2018
comment
Хорошо, это вернуло только те названия должностей, которые я хочу. Я предполагаю, что Null оставил то, что раньше было описанием других должностей, пустым. Как мне заставить его возвращать только те названия должностей и ничего больше, даже пробелы там, где раньше были другие названия должностей? Буду ли я использовать «False» вместо Null? Это мой первый месяц использования MS Access, поэтому я пытаюсь его освоить. - person Jenna Terral; 24.07.2018