如果有人能帮我解决以下问题,我将不胜感激: 我正在尝试编写一个代码(在PowerSchool中创建一个警报),该代码将指示学生是否比他们当前的年级水平更年轻或更老。 (例如,由于出生于2002年6月30日之前的学生比9年级的平均成绩更高)我似乎无法将DECODE与> = TO_DATE一起工作。这是我的陈述:
select lastfirst, decode (dob >= to_date ('2002-06-30', 'yyyy-mm-dd'), 'old') DOB
from students
where grade_level = 9
order by lastfirst
答案 0 :(得分:0)
你可能可以在你的sql中使用PowerSchool解码,但我发现当包含更少的语言/系统时代码更容易编写,所以我会把它留下来。我还会让SQL进行平均年龄计算,这样您就不必自己提供或计算平均日期(有关TO_DATE行的说明,请参阅Averaging dates in oracle sql)。
SELECT
LastFirst AS "Student Name"
,CASE WHEN dob >= (
SELECT
TO_DATE(ROUND(AVG(TO_NUMBER(TO_CHAR(dob, 'J')))),'J')
FROM Students
WHERE Grade_Level = 9
AND Enroll_Status = 0
) THEN 'Younger' ELSE 'Older' END AS "Older or Younger?"
FROM Students
WHERE Grade_Level = 9
ORDER BY LastFirst
子查询计算平均生日,CASE语句将您的每条记录与该记录进行比较,报告其是否年龄较大或较年轻。
在计算平均值的子查询中,我冒昧地假设您只想与当前注册的学生进行比较,因为撤回的学生保持相同的年级水平。你真的不希望那些10年前离开并仍然被列为9年级学生的学生弄乱你的平均数。