【发布时间】:2016-03-08 20:59:57
【问题描述】:
我有这个似乎无法弄清楚的分组问题。任何建议将不胜感激!假设我有一张这样的表:
Name Passed? PlanID Plan
-----------------------------------------
Tom 1 1 Math
Tom 1 1 Reading
Tom 0 2 Math
Tom 0 2 Reading
Tom 0 3 Math
Tom 0 3 Reading
Bobby 1 1 Math
Bobby 0 1 Reading
Bobby 1 2 Math
Bobby 1 2 Reading
Bobby 0 3 Math
Bobby 0 3 Reading
Linda 0 1 Math
Linda 1 1 Reading
Linda 0 2 Math
Linda 1 2 Reading
Linda 1 3 Math
Linda 1 3 Reading
我想要完成的是这样的:
Name Passed? PlanID
---------------------------
Tom 1 1
Bobby 1 2
Linda 1 3
所以基本上,如果第一个 planID 没有通过,请查看第二个。如果那一项还没有通过,请看第三项。我遇到的问题是所有 PlanID 将是 3 或 1,或者 Passed 列中的所有值都是 0。
我试过这样的查询:
CASE
WHEN MIN(Passed?) = 1
THEN MIN(PlanID)
ELSE MAX(PlanID)
END
我知道 max 和 min 只会产生 3 或 1,但我不知道该怎么做。谢谢!
编辑:抱歉,忘了提及如果一个人通过了 planID,那么其余的 planID 应该读作通过。所以既然鲍比第一次没有通过这两个计划,他必须再次接受。既然他通过了第二次,他就不必参加第三次了。一个人必须通过两个计划才能算作通过,如果这有意义的话。我添加了几行,希望能更好地传达我的想法。我可能也让这对我自己来说有点太混乱了。
【问题讨论】:
-
一个可以传递多个plan ID吗?
-
没通过的怎么处理?
-
为什么不
SELECT * FROM Table WHERE Passed = '1'? -
@hashbrown 希望我的编辑增加了清晰度。如果该人之前已通过,则该人应保持已通过。
-
@lrb 如果要创建一个新的 planID,那些从未通过的将延续到下一个 planID。所以如果他们仍然没有通过,他们必须参加下一个概述的课程