2016-08-23 41 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

相關問題