sql - 在 Teradata SQL 中按 id 对列求和
问题描述
现在我有以下代码的以下输出...(一个 id 只能有 1 个代码,但一个代码可以有多个 id)
SEL a.id, a.code,
CASE WHEN f.fac_id = 80007944 THEN 1
WHEN f.fac_id = 80007838 THEN 1
WHEN f.fac_id = 80007998 THEN 1
WHEN f.fac_id = 80007823 THEN 1
END AS Count1
FROM db1.t1 a
INNER JOIN db2.t2 f ON f.fac_id = a.fac_id
AND a.code IN (060, 140)
ORDER BY a.code
id code Count1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
CFC 060 1
FAD 140 1
FAD 140 1
FAD 140 1
FAD 140 1
FAD 140 1
FAD 140 1
E5C 140 1
E5C 140 1
E5C 140 1
915 140 1
915 140 1
915 140 1
6AD 140 1
6AD 140 1
6AD 140 1
6AD 140 1
6AD 140 1
6AD 140 1
我想创建一个新列,按 id 显示 count1 的总和。谁能帮我修改我的代码以反映这一点?这是我想要的输出的一个例子......
id code Count1 count_per_id
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
CFC 060 1 9
FAD 140 1 6
FAD 140 1 6
FAD 140 1 6
FAD 140 1 6
FAD 140 1 6
FAD 140 1 6
E5C 140 1 3
E5C 140 1 3
E5C 140 1 3
915 140 1 3
915 140 1 3
915 140 1 3
6AD 140 1 6
6AD 140 1 6
6AD 140 1 6
6AD 140 1 6
6AD 140 1 6
6AD 140 1 6
解决方案
我想你想要一个窗口功能:
SELECT a.id, a.code,
(CASE WHEN f.fac_id IN (80007944, 80007838, 80007998, 80007823 THEN 1
END) AS Count1,
SUM(CASE WHEN f.fac_id IN (80007944, 80007838, 80007998, 80007823 THEN 1
END) OVER (PARTITION BY id)
FROM db1.t1 a INNER JOIN
db2.t2 f ON f.fac_id = a.fac_id AND a.code IN (060, 140)
ORDER BY a.code
推荐阅读
- r - 暴露为 Web 服务的持久 R 模型返回错误答案
- java - parameter.method 或 argument.method 怎么可能?我认为它总是class.method。有人可以解释吗?
- python - 无法从链表中仅删除最后一个元素!(具有特定值的所有其他元素都被删除)
- r - 如何迭代分组变量以计算多个变量之一的平均值?
- python - Python - 组合多个 CSV 文件将文本字段呈现为数字
- excel - 检查用户表单条目是否重复
- scala - Scala 中类的初始化是如何工作的?
- java - 使用 Groovy 方法(Jenkinsfile 管道)
- node.js - 节点“找不到命令”
- javascript - TensorFlow JS tfjs | 无法使用 tf.loadLayersModel 加载模型