首页 > 解决方案 > 使用单元格引用一次更新多个行值

问题描述

我有一张需要更新的表格,但我不确定如何去做。这是架构

t1.id, t1.line, t1.item, t1.type

t2.id, t2.t1_id

t3.t2_id, t3.t1_line, t3.quantity1, t3.quantity2

t3 基本上是维护 t1 中特定项目的计数。

在此查询中,t3 将有 n 条记录。这个想法是,对于 t3 中的每个条目 n,在 t1 中会有一定数量的项目应该与之相关联。我需要计算这些项目并将 t3.t1_quantity1 设置为该计数。

SQLFiddle 架构

使用上述模式,在一个查询中,我想知道第 1 行有多少项是类型 0,第 1 行有多少项是类型 1,结果分别输入到 t3.quantity1 和 t3.quantity2。第 2 行也是如此,如果 t3 中有更多行,依此类推。

查询末尾的 t3 将显示以下内容

1, 1, 4, 2
1, 2, 4, 1
1, 3, 8, 3

我该怎么做呢?

标签: sqlsql-serversql-server-2008-r2case-when

解决方案


您需要使用UPDATEJOIN使用CASE WHENCOUNT制作它。

  1. 编写一个子查询来获取quantity1,按表中的列quantity2数计数。linet1
  2. join t2,t3表由t1.line
  3. UPDATE数据到t3表。

看起来像这样。

 UPDATE result
 SET quantity1 = t.qty1,
     quantity2 = t.qty2
 FROM(
   select line,
    COUNT(case when type = 0 then 1 END) qty1,
    COUNT(case when type = 1 then 1 END) qty2
   from t1 
   GROUP BY line
 ) t 
 INNER JOIN t2 on t2.t1_id = t.line
 inner join t3 result on t.line = result.t1_line

sqlfiddle

[结果]

| t2_id | t1_line | quantity1 | quantity2 |
|-------|---------|-----------|-----------|
|     1 |       1 |         4 |         2 |
|     1 |       2 |         4 |         1 |
|     1 |       3 |         8 |         3 |

推荐阅读