SQL查询基于条件
问题描述:
我有三个相关的表计算值:SQL查询基于条件
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
如果有人编辑值,它存放在这里,我真的需要它来计算基于如果有最新的项目编辑,或者项目值没有。
答
开始你的编辑表,让每个项目的最新编辑:
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
答
我认为这应该工作:
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
这让我几乎是一路那里(我仍然需要qwWorktype = e.worktype添加到Questions_WorkType加入)。 不幸的是,我忘了该系统的另一部分(它一直是那种一天):我有一个额外的表: 'qa_edits: EditID 项目ID 的NewValue Date' 如果有人编辑的价值,它的存储在这里,我真的需要它根据项目的最新编辑(如果有)来计算,或者如果没有项目值,则计算项目值。 对不起,忘了。 – MikeL 2011-02-24 20:51:26