我有一张表tbl_Marks
:
Std_id | sub_id | term_I | term_2
--------+---------+-----------+-------
std_1 | 1 | 40 | 50
std_1 | 2 | 30 | 40
std_1 | 3 | 20 | 30
std_1 | 4 | 10 | 50
std_2 | 1 | 50 | 50
std_2 | 2 | 50 | 50
std_2 | 3 | 50 | 50
std_2 | 4 | 50 | 50
我怎样才能得到这样的结果:
Std_id | sub_id | term_I | term_2 | total | status | PROMOTION_status
--------+---------+-----------+--------+--------+--------+------------------
std_1 | 1 | 40 | 50 | 90 | PASS | REPEATER
std_1 | 2 | 30 | 40 | 70 | PASS | REPEATER
std_1 | 3 | 20 | 20 | 40 | FAIL | REPEATER
std_1 | 4 | 10 | 50 | 60 | PASS | REPEATER
注意:如果总值小于任何sub_id
的50std_2 | 1 | 50 | 50 | 100 | PASS | PROMOTED
std_2 | 2 | 50 | 50 | 100 | PASS | PROMOTED
std_2 | 3 | 50 | 50 | 100 | PASS | PROMOTED
std_2 | 4 | 50 | 50 | 100 | PASS | PROMOTED
注意:如果总值大于50或等于每个sub_id
请帮忙!
答案 0 :(得分:1)
使用CASE
。
select t.*,
t.term_I + t.term_2 as total,
case when t.term_I + t.term_2 >= 50 then 'pass' else 'fail' end as status,
case when t.std_id = 'std_2' then 'PRMOTED' else 'REAPEATER' end as promotion_status
from tbl_marks t
答案 1 :(得分:0)
以下SQL Select语句可以提供帮助 您也可以使用子选择语句代替SQL CTE expression 但是这个查询的主要技巧是使用MIN aggregation function with Partition by子句 这有助于您检查该学生是否有低于50分的分数,如果是这样,它将该学生的所有记录作为REPEATER状态
;with cte as (
select
*,
term_1 + term_2 as total
from tbl_Marks
)
select
*,
case when (term_1 + term_2) >= 50 then 'PASS' else 'FAIL' end as status,
case when (
min(total) over (partition by Std_id)
) >= 50 then 'PROMOTED' else 'REPEATER' end as PROMOTION_status
from cte
我希望它有所帮助,