2015-09-04 4 views
0

Я пытаюсь обновить запрос в Microsoft Access с помощью SQL. Я получаю следующую ошибку при запуске «Синтаксическая ошибка (отсутствующий оператор) в выражении запроса» Я добавил следующий код в нижней части моего основного сценария SELECT/FROM Query.Обновление запроса с SQL в Access 2013

UPDATE [HRBI Query] 
SET [HRBI Query].[PaySegmentMultiplier] = (CASE WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Above top segment' THEN 0 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Below segment 1' THEN 1.35 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S1' THEN 1.25 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S2' THEN 1.15 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S3' THEN .90 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S4' THEN .60 ELSE CASE 
WHEN [PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S5' THEN .40 ELSE CASE 
ELSE PaySegmentMultiplier 
END 
END 
END 
END 
END 
END) 
FROM [HRBI Query]; 

Я новичок в SQL. Может ли кто-нибудь объяснить, почему я получаю эту ошибку и как ее исправить? Благодарю.

EDIT:

Я попытался с помощью переключателя, но я все еще получаю сообщение об ошибке на sytax. Есть идеи?

SELECT SWITCH([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Above top segment',[HRBI Query].PaySegmentMultiplier = 0, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Below segment 1', [HRBI Query].PaySegmentMultiplier =1.35, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S1', [HRBI Query].PaySegmentMultiplier =1.25, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S2', [HRBI Query].PaySegmentMultiplier =1.15, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S3', [HRBI Query].PaySegmentMultiplier =.90, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S4', [HRBI Query].PaySegmentMultiplier =.60, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S5', [HRBI Query].PaySegmentMultiplier =.40, True,'Error') 
FROM [HRBI Query]; 

EDIT: Я пробовал эту и еще синтаксическую ошибку?

SET [HRBI Query].[PaySegmentMultiplier] = Switch (
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Above top segment', 0, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Below segment 1', 1.35, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S1', 1.25, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S2', 1.15, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S3', .90, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S4', .60, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S5', .40, TRUE, PaySegmentMultiplier); 
+0

не думайте, что вам нужен еще случай ... измените их, чтобы просто «когда» .., но я думал, что доступ не поддерживает регистр в SQL ... возможно, switch' или 'iif'? http://stackoverflow.com/questions/14785586/what-is-the-correct-case-select-statement-in-access-2010 – xQbert

+0

У вас есть [[запрос HRBI] .PaySegmentMultiplier = 0', где значение '0' будет принадлежать. См. Пример ниже. – Andre

+0

Спасибо Andre451. Я попробовал Switch, но все еще получаю синтаксическую ошибку? Имеет ли значение, что я добавляю SET в нижней части основного кода запроса. (ВЫБЕРИТЕ ИЗ)? – Chris2015

ответ

0

В MS Access, лучший перевод CASE/WHEN будет вложенной функцией IIF(). Также в обновлении операторов SQL с диалектом Access 'вы не будете использовать предложение FROM в конце.

Единственная проблема - отслеживать круглые скобки, которые должны равняться числу IIF. I indent внизу, чтобы помочь визуализировать:

UPDATE [HRBI Query] 
SET [HRBI Query].[PaySegmentMultiplier] = 
IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Above top segment', 0, 
    IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Below segment 1', 1.35, 
     IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S1', 1.25, 
     IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S2', 1.15, 
      IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S3', .90, 
       IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S4', .60, 
       IIF([PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S5', .40, 
        PaySegmentMultiplier 
       ) 
      ) 
      ) 
     ) 
    ) 
) 
); 
0

CASE WHEN .. ELSE .. END для Sql Server.

В Access вы используете Switch функцию:

Switch (expression1, value1, expression2, value2, ... expression_n, value_n) 

так в вашем случае

UPDATE [HRBI Query] 
SET [HRBI Query].[PaySegmentMultiplier] = Switch (
[PayGroupCountryDesc] = 'France' AND BasePayRangeSegment = 'Above top segment', 0, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'Below segment 1', 1.35, 
[PayGroupCountryDesc] = 'Country' AND BasePayRangeSegment = 'S1', 1.25 
[...etc...] 
[and to simulate ELSE] 
True, PaySegmentMultiplier 
) 

или для запроса на выборку:

SELECT Switch (...) AS NewPaySegmentMultiplier FROM [HRBI Query] 
Смежные вопросы