【问题标题】:Update Multiple Row Values at Once using cell a reference使用单元格引用一次更新多个行值
【发布时间】:2018-07-20 18:41:39
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 请解释表t2是如何参与的。
  • t2 是唯一与 t1 直接相关的表。
  • @STLDeveloper 可以说我不能直接从 T3 引用 T1。

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


【解决方案1】:

您需要将UPDATEJOINCASE WHENCOUNT 一起使用。

  1. 编写子查询以从t1 表中获取quantity1quantity2 计数line colnum。
  2. join t2, t3t1.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 |

【讨论】:

  • 这很有趣,我会玩弄它,让你知道它是如何工作的。
  • 为了简化问题,我可能把事情搞砸了。这确实奏效了,但是当我将它应用于我正在处理的实际查询时,我无法让它工作。
猜你喜欢
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多