代码之家  ›  专栏  ›  技术社区  ›  addohm

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

  •  1
  • addohm  · 技术社区  · 7 年前

    我有一张表需要更新,但我不知道该怎么做。这是模式

    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.quantity2中2号线也一样,如果t3有更多的线路,就以此类推。

    在查询结束时,t3将显示以下内容

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

    我该怎么做?

    1 回复  |  直到 7 年前
        1
  •  2
  •   D-Shih    7 年前

    你需要使用 UPDATE JOIN CASE WHEN COUNT 才能成功。

    1. 编写子查询以获取 quantity1 我是说, quantity2 计数依据 line Colnum来自 t1 桌子。
    2. join t2 我是说, t3 表由 t1.line
    3. 更新 数据到 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 |