假设我有一个如下表
ID Marks1 Marks2 Marks3
-------------------------
1 10 0 4
2 0 40 90
现在,我需要从这个表中选择一个首先优先考虑正值的方法。因此,如果标记为0,则它将向右移动。 SELECT应该给出以下输出
ID Marks1 Marks2 Marks3
-------------------------
1 10 4 0
2 40 90 0
你能指导我这个方法吗?如果可以在select语句中完成它将会很棒。提前谢谢。
答案 0 :(得分:1)
像这样的东西,你需要检查前一列不是0的每个后续行。选择值为null,因为它使代码更容易阅读,因为我可以使用coalesce
Select
Coalesce(Marks1, Marks2, Marks3,0) as Marks1,
Case when marks1 is not null
then Coalesce(Marks2, Marks3, 0) else 0
end as Marks2,
case when marks1 is not null
and marks2 is not null
then Coalesce(Marks3,0)
end as Marks3
from
(
Select
Case when Marks1 =0 then null else Marks1 end as Marks1,
Case when Marks2 =0 then null else Marks2 end as Marks2,
Case when Marks3 =0 then null else Marks3 end as Marks3
From mytbl
)