首页 > 解决方案 > 在 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

标签: sqlteradata

解决方案


我想你想要一个窗口功能:

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

推荐阅读