SQL-запрос для вычисления значений на основе условий - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть три соответствующие таблицы:

Evaluations:
EvalID
WorktypeID
PointsPossible

Items:
EvalID
ItemID
Value
QuestionID

Question_Worktype:
WorkTypeID
QuestionID
Points

Есть несколько элементов для каждой оценки, и у каждого элемента есть пара QuestionID / WorkTypeID, которая относится к записи в Question_Worktype, где находится оценка.

Items.Value - является ли Предмет правильным или нет.

Я хотел бы запрос, который возвращает общее количество Баллов за все Предметы для Оценки, Баллы начисляются только в том случае, если Значение Предмета равно1.

Моей целью было бы получить:

Eval_ID, Total Points (calculated), Points Possible

Кажется, я не могу обернуть вокруг себя свой мозг.

Редактировать: Я забыл важную часть:

У меня есть дополнительная таблица:

qa_edits:
EditID
ItemID
NewValue
Date

Если кто-то редактирует значение, оно сохраняется здесь, и мне действительно нужно его рассчитать на основе новейшего редактирования дляэлемент, если он есть, или значение элемента, если его нет.

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Начните с таблицы редактирования, чтобы получить последние изменения для каждого элемента:

SELECT
    M.ItemId,
    COALESCE(Q.Value, I.Value) as Value,
    I.QuestionId
FROM (
    SELECT
       I.ItemId,
       MAX(Date) as LastEditDate
    FROM Items as I
    LEFT OUTER JOIN QA_Edits as E ON
       I.ItemId = E.ItemId
    GROUP BY
       I.ItemId
) as M
LEFT OUTER JOIN QA_Edits as Q ON
    M.ItemId = Q.ItemId
    AND M.LastEditDate = Q.Date
LEFT OUTER JOIN Items as I ON 
    M.ItemId = Q.ItemId
    AND M.LastEditDate IS NULL

Я бы предложил для этого представление - назовем его LatestItems.

Затем, назад к Blorgbeard's :

select
    e.Eval_ID, 
    sum(qw.Points) as TotalPoints, 
    e.PointsPossible
from Evaluations e
join LatestItems i on 
    e.Eval_ID = i.Eval_ID 
    and i.Value = 1
join Questions_WorkType qw on 
    qw.QuestionID = i.QuestionID
group by 
    e.Eval_ID, e.PointsPossible
1 голос
/ 24 февраля 2011

Я думаю, что это должно работать:

select e.Eval_ID, sum(qw.Points) as TotalPoints, e.PointsPossible
   from Evaluations e
   left join Items i on e.Eval_ID = i.Eval_ID and i.Value = 1
   join Questions_WorkType qw on qw.QuestionID = i.QuestionID
   group by e.Eval_ID, e.PointsPossible
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...