遍历每一行并创建新表

时间:2016-08-23 08:12:46

标签: sql sql-server tsql sql-server-2008-r2 sql-function

假设我有下表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所描述的那样遍历每一行,还是有更有效的方式?

1 个答案:

答案 0 :(得分: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;