使用单元格引用一次更新多个行值

时间:2018-07-20 18:41:39

标签: sql sql-server sql-server-2008-r2 case-when

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

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 Schema

使用上面的模式,在一个查询中,我想知道第1行有多少个项目是类型0,第1行有多少个项目是类型1,结果输入到t3.quantity1和t3中。数量2。与第2行相同,如果t3中有更多行,则依此类推。

查询末尾的

t3将显示以下内容

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您需要将UPDATEJOINCASE WHENCOUNT配合使用。

  1. 编写子查询,以从quantity1表中的quantity2列中获取linet1计数。
  2. join t2t3的{​​{1}}表
  3. t1.lineUPDATE表的数据。

看起来像这样。

t3

sqlfiddle

[结果]

 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