【问题标题】:Iterate through every row and create new table遍历每一行并创建新表
【发布时间】:2016-08-23 08:12:45
【问题描述】:

假设我有下表T1:

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

我现在需要迭代每一行,创建一个新表 T2 并用 1 填充它,只要 T1 中有两个 1。

所以新表 T2 看起来像:

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

我真的应该像here 所述那样遍历每一行,还是有更有效的方法?

【问题讨论】:

  • 但是你为什么要做这样的事情呢?
  • @jarlh:这是我实际问题的一个非常简化的版本。

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


【解决方案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;

【讨论】:

  • 好的,解决了这里描述的问题,谢谢。但是我的描述非常简单,我期望有几个 IF 语句。我将不得不提出另一个描述更好的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2018-07-30
  • 2021-04-14
  • 2017-10-07
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多