根据实际数据更改列中数据的位置

时间:2010-12-28 10:13:06

标签: tsql

假设我有一个如下表

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语句中完成它将会很棒。提前谢谢。

1 个答案:

答案 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
)