SQL - СЛУЧАЙ, КОГДА Ошибка?

Может ли кто-нибудь помочь мне? Я не уверен, почему этот код не выполняется:

'0' || CASE
WHEN (EAmain.ActivityStopMin - EAmain.ActivityStartMin) < 0 THEN         (DATEDIFF(hh,EAmain.ActivityStartTimeHours || ':' ||     EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours || ':' ||     EAmain.ActivityStopTimeMin)-1)
WHEN (EAmain.ActivityStopMin - EAmain.ActivityStartMin) >= 0 THEN
(DATEDIFF(hh,EAmain.ActivityStartTimeHours || ':' ||     EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours || ':' ||     EAmain.ActivityStopTimeMin))
END || ':' || (DATEDIFF(n,EAmain.ActivityStartTimeHours || ':' ||     EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours || ':' ||     EAmain.ActivityStopTimeMin)#60) || '0' AS ActivityTotalTime,

РЕДАКТИРОВАТЬ: я нашел код ошибки, вот он:

ОШИБКА № 5540: SQLCODE: -29 Сообщение: поле «EAMAIN.ACTIVITYSTOPMIN» не найдено в соответствующих таблицах ^ ВЫБЕРИТЕ Имя, Start_Time, Stop_Time, Visit_Date, Total_Time, ActivityStartTime, ActivityStopTime, CASE WHEN LEN (ActivityTotalTime) =? THEN SUBSTR(ActivityTotalTime, ?, ?) WHEN LEN(ActivityTotalTime) = ? THEN ActivityTotalTime END AS ActivityTotalTime, Discipline FROM (SELECT Demographics. Name, Visits. Start_Time, Visits. Stop_Time, Visits. Visit_Date, Visits. Total_Time, EAmain. ActivityStartTime, EAmain. ActivityStopTime, ? || CASE WHEN (EAmain. ActivityStopMin-

РЕДАКТИРОВАТЬ СНОВА!: Этот код был реализован до оператора CASE, и он работал:

'0' || DATEDIFF(hh,EAmain.ActivityStartTimeHours || ':' ||    
EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours || ':' ||     
EAmain.ActivityStopTimeMin) || ':' || (DATEDIFF(n,EAmain.ActivityStartTimeHours || ':' || 
EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours || ':' ||    
EAmain.ActivityStopTimeMin)#60) || '0' AS ActivityTotalTime,

person eatonphil    schedule 31.08.2012    source источник
comment
Это лишь малая часть запроса. Но получаете ли вы какие-либо сообщения об ошибках?   -  person GolezTrol    schedule 01.09.2012
comment
Ничего конкретного :(   -  person eatonphil    schedule 01.09.2012
comment
Значит, нам остается только догадываться? Я предполагаю, что вы получаете либо синтаксическую ошибку, либо ошибку времени выполнения.   -  person GolezTrol    schedule 01.09.2012
comment
Ну тогда понятно: поля ACTIVITYSTOPMIN не существует в EAmain.   -  person GolezTrol    schedule 01.09.2012
comment
Да, это так. Как я сказал ниже, весь запрос работал нормально, пока не был добавлен оператор CASE. Это как-то связано с моим синтаксисом CASE   -  person eatonphil    schedule 01.09.2012
comment
Пожалуйста, смотрите мой измененный ответ.   -  person GolezTrol    schedule 01.09.2012


Ответы (1)


В последней строке вы получили EAmain.ActivityStartTimeMin,EAmain.ActivityStopTimeHours. Эта запятая кажется неуместной. Как и )#60) на пару символов дальше в последней строке.

EAmain.ACTIVITYSTOPMIN не существует. :) Я вижу в вашем сообщении об ошибке, что EMAin - это не таблица, а запрос. Убедитесь, что вы также выбрали это поле в запросе.

person GolezTrol    schedule 31.08.2012
comment
Нет, так и должно быть. Весь этот код работал, пока я не добавил оператор CASE, чтобы проверить, было ли значение stopmin-startmin отрицательным. - person eatonphil; 01.09.2012
comment
Смотрите мой измененный ответ ^ пожалуйста - person eatonphil; 01.09.2012
comment
@phileaton: Не могли бы вы опубликовать код, который работал до? - person Shannon Severance; 01.09.2012
comment
@phileaton в коде перед оператором CASE, вы вообще не ссылались на поле ActivityStopMin. Вы уверены, что не имеете в виду ActivityStopTimeMin или что-то в этом роде? Пожалуйста, внимательно прочитайте свой код. Оператор case — единственное место, где используется ActivityStopMin. Это не синтаксическая ошибка. - person GolezTrol; 01.09.2012
comment
Замечательно, я очень извиняюсь за свое невежество, это сработало отлично! Извините, и спасибо! - person eatonphil; 01.09.2012