Отношения SQL - PullRequest
       2

Отношения SQL

0 голосов
/ 19 апреля 2011

У меня есть четыре таблицы:

  1. task - есть batch_id и оценки того, сколько времени потребуется для выполнения
  2. пакетов - групп задач
  3. batch_log - записи, показывающие время, отработанное для каждой задачи, с идентификатором пользователя, для которого она была выполнена.
  4. операция - тип машины, на которой выполняется партия, краска, шелкография и т. д.

Как получить, чтобы каждая партия работала для каждого пользователя, итоговая сумма из каждого журнала партии для этих идентификаторов партии и общая оценка для каждого идентификатора задачи для этой партии?

РЕДАКТИРОВАТЬ:

ТАБЛИЦЫ:

task
id     estimated_nonrecurring   estimated_recurring  batch_id

batch
id     operation_id date_entered

batch_log
id     userid    batch_id   time_elapsed

operation
id     name

Я думаю:

get each user;
get a list of distinct batch_ids that they worked on;
get a sum of all the time_elapsed from each batch_log for those batch id;
get all the non_recurring and the recurring for each task with each batch_id;

so that the result is like

userid, operation, batch_id, total_elapsed, total_estimate, date_entered

Причина, по которой это делается, состоит в том, чтобы можно было оценить пользователей, насколько они продуктивны, и использовать эти запросы в Excel.,Я думаю, что мне, возможно, придется пойти с двумя запросами:

  1. журнал партии
  2. запрос, чтобы получить общую оценку для каждой партии

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

Я не уверен в структуре ваших таблиц, но что-то вроде этого должно работать:

select batch.id, 
(select sum(batch.time)
from batch_log 
inner join task on task.id = batch_log.id
where task.batchId = batch.id) as total,
(select sum(task.estimate ) from task where task.batchId = batch.id) as estimate
from batch
inner join task on task.batchId = batch.id
where batch_log.userId = @userId
1 голос
/ 19 апреля 2011

Что-то вроде:

SELECT bl.UserId, b.name, t.estimate
FROM batch_log as bl
JOIN batches as b
    ON b.id = bl.batch_id
JOIN task as t
    ON t.id = b.task_id
WHERE bl.UserId = 123

Трудно сказать, без какой-либо структуры таблицы.

1 голос
/ 19 апреля 2011

выберите отдельный bl.userid, t.batchid из batch_log bl внутренняя задача соединения t для t.taskid = bl.taskid;

выберите сумму (bl.time_spent), b.batchid из партии b левая задача соединения t для b.batchid = t.batchid внутреннее соединение batch_log bl для bl.taskid = t.taskid;

выберите сумму (t.estimate), b.batchid из партии b оставьте задачу соединения t на b.batchid = t.batchid;

Почему он называется batch_log, но он посвящен задачам и затраченному времени?

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