Выбранные в SQL данные и VBScript - PullRequest
0 голосов
/ 26 июня 2018

Отредактированный вопрос:

У меня есть три таблицы, для которых я использую объединения, чтобы извлечь один набор записей данных в следующем формате.

tbl_hours: jobID, bosstaskID, date, starttime, endtime, hours
tbl_jobs: jobID : other fields
tbl_tasks: taskID, officetaskID :other fields

ВЫБРАТЬ вывод всех записей

empID   hHours  hStartTime              hStopTime               taskID      officeTaskID    hDate                   jobID
1      .50      2018-06-25 07:00:00.000 2018-06-25 07:30:00.000 LOAD        Load Up/UNL     2018-06-25 00:00:00.000 1
1      .25      2018-06-25 07:30:00.000 2018-06-25 07:45:00.000 DT          Drive Time      2018-06-25 00:00:00.000 1
1      1.25     2018-06-25 07:45:00.000 2018-06-25 09:00:00.000 PATH        Job Site        2018-06-25 00:00:00.000 1
1      .25      2018-06-25 09:00:00.000 2018-06-25 09:15:00.000 BREAK       Break           2018-06-25 00:00:00.000 1
1      .75      2018-06-25 09:15:00.000 2018-06-25 10:00:00.000 OUT-TERM    Job Site        2018-06-25 00:00:00.000 1
1      .75      2018-06-25 10:00:00.000 2018-06-25 10:45:00.000 HEAD-TERM   Job Site        2018-06-25 00:00:00.000 1
1      .50      2018-06-25 10:45:00.000 2018-06-25 11:15:00.000 TEST        Job Site        2018-06-25 00:00:00.000 1
1      1.00     2018-06-25 11:15:00.000 2018-06-25 12:15:00.000 LUNCH       Lunch           2018-06-25 00:00:00.000 1
1      1.00     2018-06-25 12:15:00.000 2018-06-25 13:15:00.000 ROUGH       Job Site        2018-06-25 00:00:00.000 2
1      .75      2018-06-25 13:15:00.000 2018-06-25 14:00:00.000 OUT-TERM    Job Site        2018-06-25 00:00:00.000 2
1      .75      2018-06-25 14:00:00.000 2018-06-25 14:45:00.000 HEAD-TERM   Job Site        2018-06-25 00:00:00.000 2
1      .50      2018-06-25 14:45:00.000 2018-06-25 15:15:00.000 TEST        Job Site        2018-06-25 00:00:00.000 2
1      .25      2018-06-25 15:15:00.000 2018-06-25 15:30:00.000 BREAK       Break           2018-06-25 00:00:00.000 2
1      .50      2018-06-25 15:30:00.000 2018-06-25 16:00:00.000 ST          Shop Time       2018-06-25 00:00:00.000 NULL
1      1.00     2018-06-25 16:00:00.000 2018-06-25 17:00:00.000 ROUGH       Job Site        2018-06-25 00:00:00.000 3
1      1.00     2018-06-25 17:00:00.000 2018-06-25 18:00:00.000 FIBER-TERM  Job Site        2018-06-25 00:00:00.000 3
1      .50      2018-06-25 18:00:00.000 2018-06-25 18:30:00.000 TEST        Job Site        2018-06-25 00:00:00.000 3
1      .50      2018-06-25 18:30:00.000 2018-06-25 19:00:00.000 LOAD        Load Up/UNL     2018-06-25 00:00:00.000 3
1      .25      2018-06-25 19:00:00.000 2018-06-25 19:15:00.000 BREAK       Break           2018-06-25 00:00:00.000 3
1      .50      2018-06-25 19:15:00.000 2018-06-25 19:45:00.000 JS          Job Site        2018-06-25 00:00:00.000 3

Когда я использую следующий запрос SQL, я могу приблизить его к желаемому формату, за исключением того, где вы видите последний период перерыва.Он выбирает максимальное значение (hStopTime) задачи после перерыва.

SQL-запрос

        SELECT tbl_employees.empID, SUM(tbl_hours.hHours) as hHours,
        Min(tbl_hours.hStartTime) as hStartTime, 
        Max(tbl_hours.hStopTime) as hStopTime,
        tbl_task.taskPrintShort as officeTaskID, tbl_hours.hDate, 
        tbl_jobs.jobID 
        FROM ((tbl_Hours LEFT JOIN tbl_task ON tbl_hours.codeID = tbl_task.taskID) 
        LEFT JOIN tbl_employees on tbl_hours.empID=tbl_employees.empID) 
        LEFT JOIN tbl_jobs on tbl_hours.jobID = tbl_jobs.jobID
        WHERE tbl_hours.empID=1 and tbl_hours.hDate='2018-06-25'
        GROUP BY tbl_employees.empID, tbl_jobs.jobID, tbl_task.taskPrintShort, 
        tbl_employees.empFirst, tbl_employees.empLast, tbl_hours.hDate
        ORDER BY tbl_hours.hStartTime

Выходные данные вышеприведенного оператора SELECT.

empID     hHours  hStartTime              hStopTime         OfficeTaskID    hDate                   jobID
1   .50   2018-06-25 07:00:00.000   2018-06-25 07:30:00.000 Load Up/UNL     2018-06-25 00:00:00.000 1
1   .25   2018-06-25 07:30:00.000   2018-06-25 07:45:00.000 Drive Time      2018-06-25 00:00:00.000 1
1   3.25  2018-06-25 07:45:00.000   2018-06-25 11:15:00.000 Job Site        2018-06-25 00:00:00.000 1
1   .25   2018-06-25 09:00:00.000   2018-06-25 09:15:00.000 Break           2018-06-25 00:00:00.000 1
1   1.00  2018-06-25 11:15:00.000   2018-06-25 12:15:00.000 Lunch           2018-06-25 00:00:00.000 1
1   3.00  2018-06-25 12:15:00.000   2018-06-25 15:15:00.000 Job Site        2018-06-25 00:00:00.000 2
1   .25   2018-06-25 15:15:00.000   2018-06-25 15:30:00.000 Break           2018-06-25 00:00:00.000 2
1   .50   2018-06-25 15:30:00.000   2018-06-25 16:00:00.000 Shop Time       2018-06-25 00:00:00.000 NULL
1   3.00  2018-06-25 16:00:00.000   2018-06-25 19:45:00.000 Job Site        2018-06-25 00:00:00.000 3
1   .50   2018-06-25 18:30:00.000   2018-06-25 19:00:00.000 Load Up/UNL     2018-06-25 00:00:00.000 3
1   .25   2018-06-25 19:00:00.000   2018-06-25 19:15:00.000 Break           2018-06-25 00:00:00.000 3

Этопроблемная линия.

1   3.00  2018-06-25 16:00:00.000   2018-06-25 19:45:00.000 Job Site        2018-06-25 00:00:00.000 3

Мне нужно сгруппировать последние строки, как в этом примере

1   2.50  2018-06-25 16:00:00.000   2018-06-25 18:30:00.000 Job Site        2018-06-25 00:00:00.000 3
1   .50   2018-06-25 18:30:00.000   2018-06-25 19:00:00.000 Load Up/UNL     2018-06-25 00:00:00.000 3
1   .25   2018-06-25 19:00:00.000   2018-06-25 19:15:00.000 Break           2018-06-25 00:00:00.000 3
1   .50   2018-06-25 19:15:00.000   2018-06-25 19:45:00.000 Job Site        2018-06-25 00:00:00.000 3

В конечном итоге я пытаюсь получить время начала и окончания для всех officeTaskID, которыетипа «Сайт вакансий».Эта же задача может быть выполнена до или после другой задачи (например, перерыв).Мой офис-менеджер не хочет видеть всю информацию о задачах, которую я нахожу полезной.

Можно ли решить мою головоломку?

Редактировать: Информация о запрошенной версии -

Microsoft SQL Server 2000 - 8.00.2066 (Intel X86) 11 мая 2012 г. 18:41:14 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition для Windows NT 5.2 (сборка 3790: пакет обновления 2)

1 Ответ

0 голосов
/ 26 июня 2018

Вы хотите использовать агрегат и группу по.

SELECT 
tbl_employees.empID, tbl_jobs.jobShort as jobID, 
tbl_task.taskShort as taskID, tbl_task.taskPrintShort as OfficeID, 
tbl_hours.hDate as date, 
MIN(tbl_hours.hStartTime) as StartTime, 
MAX(tbl_hours.hStopTime) As StopTime, 
SUM(tbl_hours.hHours) as Hours
FROM ((tbl_Hours LEFT JOIN tbl_task ON tbl_hours.codeID = tbl_task.taskID) 
LEFT JOIN tbl_employees on tbl_hours.empID=tbl_employees.empID) 
LEFT JOIN tbl_jobs on tbl_hours.jobID = tbl_jobs.jobID
WHERE tbl_hours.empID=1 and tbl_hours.hDate='2018-06-25'
GROUP BY 
tbl_employees.empID, tbl_jobs.jobShort, 
tbl_task.taskShort, tbl_task.taskPrintShort, tbl_hours.hDate
ORDER BY tbl_hours.hStartTime

Примечание. Я изменил дату на более надежный формат (ISO)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...