sql - 使用单元格引用一次更新多个行值
问题描述
我有一张需要更新的表格,但我不确定如何去做。这是架构
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 设置为该计数。
使用上述模式,在一个查询中,我想知道第 1 行有多少项是类型 0,第 1 行有多少项是类型 1,结果分别输入到 t3.quantity1 和 t3.quantity2。第 2 行也是如此,如果 t3 中有更多行,依此类推。
查询末尾的 t3 将显示以下内容
1, 1, 4, 2
1, 2, 4, 1
1, 3, 8, 3
我该怎么做呢?
解决方案
您需要使用UPDATE
和JOIN
使用CASE WHEN
并COUNT
制作它。
- 编写一个子查询来获取
quantity1
,按表中的列quantity2
数计数。line
t1
join
t2
,t3
表由t1.line
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
[结果]:
| t2_id | t1_line | quantity1 | quantity2 |
|-------|---------|-----------|-----------|
| 1 | 1 | 4 | 2 |
| 1 | 2 | 4 | 1 |
| 1 | 3 | 8 | 3 |
推荐阅读
- php - php增加时间字符串变量
- bash - 在 bash 中的 5,000 个目录中创建 5,000,000,000 个空文件的最快方法
- javascript - 如何从我的 html 表单中的 API 获取信息?
- visual-studio - Visual Studio 将 Selenium 代码编译为 exe
- r-markdown - r markdown 方程无法在 Word 2016 中正确编织
- shopify - 如何在 Shopify 上显示类似于桌面版的移动版
- java - 有什么方法可以扩展 @Configuration 类以包含构造函数参数?
- postgresql - 引起:org.postgresql.util.PSQLException:错误:大对象'some_number'不存在
- java - 自定义查询不适用于 Spring Data Neo4j 存储库中的接口投影
- php - Woocommerce 基于数量的每件商品百分比折扣