2016-08-23 2 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; 

Добавить into t2 после select, если вы действительно хотите другую таблицу.

Примечание: таблицы SQL и наборы результатов представляют неупорядоченные наборы (если для создания набора результатов не существует order by). Таким образом, если вы создаете новую таблицу, строки будут неупорядочены и не будут соответствовать исходным данным. Вам может просто понадобиться запрос:

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

Хорошо, это решает проблему, описанную здесь, спасибо. Но мое описание было очень упрощено, и я ожидал чего-то с несколькими IF-заявлениями. Мне нужно будет поставить другой вопрос с лучшим описанием. – user1170330

Смежные вопросы