所以我有一个查询,当前返回一个1s和0s的表,如下所示
1 0 0
1 1 0
0 0 1
0 1 1
1 1 0
1 1 1
但是,我想修改我的查询,以便对于具有多个1的行,我们只保留行中的前1个.例如,我想将(1 1 1)转换为(1 0 0),(0 1 1)转换为(0 1 0),依此类推.似乎IF逻辑将是最后的手段.
你们都推荐什么?我可以做一个case语句,其中一列中的值取决于另一列值吗?
换句话说,“列2 =当列1 = 1且列2 = 1,然后0 ……等等时的情况?”
最佳答案 对于三列,逻辑是:
select col1,
(case when col1 = 1 then 0 else col2 end) as col2,
(case when col1 = 1 or col2 = 1 then 0 else col3 end) as col3
from query q
如果您有更多列,我会采取不同的方法:
select col1,
(case when firstOne < 2 then 0 else col2 end) as col2,
(case when firstOne < 3 then 0 else col3 end) as col3,
(case when firstOne < 4 then 0 else col4 end) as col4,
. . .
from (select q.*,
(case when col1 = 1 then 1
when col2 = 1 then 2
when col3 = 1 then 3
. . .
end) as FirstOne
from query q
) q