所以我有一个查询,当前返回一个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 ......等等时的情况?”
答案 0 :(得分: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
答案 1 :(得分:0)
作为条件结构的替代方法,您可以执行以下操作:
select a, b * (1-a) as [b'], c * (1-b) * (1-a) as [c']
from your_table
这取决于列a,b和c,每个只允许值0和1。
(示例here。)