2016-08-23 52 views
0

假设我有如下表T1迭代通过每一行,并创建新表

| col1 | col2 | col3 | 
|------|------|------| 
| 0 | 1 | 1 | // 1 
| 1 | 0 | 1 | // 1 
| 0 | 1 | 0 | // 0 

我现在需要遍历每一行,创建一个新表T2,并用1填充它,每当有两个1连续在T1

所以新表T2会是什么样子:

| res | 
|-----| 
| 1 | 
| 1 | 
| 0 | 

如果我真的过的每一行迭代,如描述here,或者是有一个更有效的方法?

+0

但你为什么要这样做? – jarlh

+0

@jarlh:这是我实际问题的一个非常简化的版本。 – user1170330

回答

1

您可以将“1”加起来。假设每列是0或1(如题):

select (case when col1 + col2 + col3 = 2 then 1 else 0 end) as res 
from t1; 

select后添加into t2如果你真的想另一个表。

注意:SQL表和结果集表示无序的集(除非有一个order by用于创建结果集)。所以,如果你创建一个新表,这些行是无序的,并且不会对应于原始数据。你可能只是想要这样一个查询:

select t1.*, 
     (case when col1 + col2 + col3 = 2 then 1 else 0 end) as res 
from t1; 
+0

好的,这解决了这里描述的问题,谢谢。但是我的描述非常简单,我期望有几个IF语句。我将不得不提出另一个更好的描述。 – user1170330