4

所以我有一个查询,它当前返回一个 1 和 0 的表,如下所示

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 逻辑将是最后的手段。

大家会推荐什么?我可以做一个案例陈述,其中一列中的值取决于另一列值吗?

换句话说,“COLUMN 2 = CASE WHEN COLUMN 1 = 1 and COLUMN 2 = 1, then 0...etc?”

4

2 回答 2

2

对于三列,逻辑是:

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
于 2013-03-19T16:02:37.867 回答
0

作为条件构造的替代方案,您可以执行以下操作:

select a, b * (1-a) as [b'], c * (1-b) * (1-a) as [c'] 
from your_table

这确实取决于 a、b 和 c 列,每个列只允许值 0 和 1。

(这里的例子。)

于 2013-03-19T18:19:28.403 回答