2014-01-29 4 views
0

Я не уверен, как задать этот вопрос. Мне нужно преобразовать этоКристаллический запрос к sql?

MACHINE HOURS [@HrsMachine]: 
if left({Employee.First_Name},1)="8" then {Job_Operation_Time.Act_Setup_Hrs}+{Job_Operation_Time.Act_Run_Hrs} else 0 

Запрос Crystal Report на запрос sql. Я понимаю часть tables.column таблицы, но я не понимаю, что числа, которые появляются после, т.е.

left({Employee.First_Name},1)="8"

Это право? Если имя сотрудника имеет в нем 8, то время выполнения операции. Фактическая настройка часов плюс время работы. Фактическое время работы, иначе ничего не возвращает.

Может кто-нибудь помочь мне понять, возможно, какой-нибудь псевдокод?

EDIT:

Хорошо, я попытался

SELECT TOP 50 Employee.First_Name, Job_Operation_Time.Act_Setup_Hrs, Job_Operation_Time.Act_Run_Hrs, 
     CASE 
      WHEN LEFT(Employee.First_Name, 1)='8' THEN 
      Job_Operation_Time.Act_Setup_Hrs + Job_Operation_Time.Act_Run_Hrs 
      ELSE 0 
     END FOO 
FROM Employee, Job_Operation_Time 

, но я получаю эту ошибку: Warning: mssql_next_result() ожидает параметр 1, чтобы быть ресурсом, данный объект в/главная/toolplas/public_html/main/manage/adminer.php on line 673

Он работает в некоторой степени, поскольку я получаю первые 50 сотрудников, но не те, которые начинаются с числа 8 (число 8 - это машины). Я не уверен, что добавление работает.

+1

Если вы хотите ограничить результаты * Jus t *, тогда вам нужно добавить предложение WHERE. – craig

+0

, если у вас все еще есть проблемы, возможно, потребуется некоторое время, чтобы выполнить скрипт SQL и отправить здесь, чтобы мы могли просматривать некоторые данные. – SOfanatic

+0

@ craig Ahh okay имеет смысл, спасибо, что сработало. – MikeOscarEcho

ответ

1
SELECT ..., 
     CASE 
      WHEN LEFT(Employee.First_Name, 1)='8' THEN 
      Job_Operation_Time.Act_Setup_Hrs + Job_Operation_Time.Act_Run_Hrs 
      ELSE 0 
     END TOTAL_HOURS 
FROM ... 
-- remove non-machines 
WHERE LEFT(Employee.First_Name,)='8' 

** редактировать **

Если вы устраняете все, что не машина, то формула может быть:

Job_Operation_Time.Act_Setup_Hrs + Job_Operation_Time.Act_Run_Hrs TOTAL_HOURS 
+0

Извините, что я испортил. Я поместил mysql в качестве тега, но я работаю с mssql с помощью администратора. Я использовал ваш запрос, но изменил SUBSTR на LEFT (после функций исследования mssql), и я получаю желаемые результаты для Act Setup Hours и Act Run hours. Тем не менее, для Employee.First_Name, 1) = '8', это просто дает мне первые 50 имен сотрудников и не начинается с номера 8 (который я знаю, есть в таблицах) Обновлен мой sql на основе выше, пожалуйста, взгляните на эту ошибку. – MikeOscarEcho

2
int machineHours = 0; 
if(Employee.First_Name.CharAt(0) == 8) // if the first character i.e., left most character 
             //in an employee's first name is equal to 8 
machineHours = Act_Setup_Hurs + Act_Run_hrs; 

Так в основном формула только сложение часов для сотрудников, которые имеют «8» в начале своего имени, все остальные получают 0.

+0

Спасибо, что помогает мне понять это намного лучше! – MikeOscarEcho

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