首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为给定的主键在两列内执行很少的计算

如何为给定的主键在两列内执行很少的计算
EN

Stack Overflow用户
提问于 2019-07-08 17:19:32
回答 3查看 74关注 0票数 1

查询是根据其他贡献者的要求编辑的。提前谢谢。对于给定的主键(id_pk),让我们假设以下值:

代码语言:javascript
运行
复制
 1. id_pk | code_col| amt_col
 2. abc   | 10  | 1000
 3. abc   | 11  | 5
 4. abc   | 12  | 10
 5. abc   | 13  | 20

现在,我需要检查一下,对于命名为'abc‘的主键,在'code_col’列下是否存在一个名为'10‘的值。如果此条件满足,则需要执行以下操作:

  1. 对于相同的主键abc,对于code_col值为11,从amt_col值10 (即1000)减去amt_col值(即5)。因此,最终值为0应在上表的第二行中更新。
  2. 对于相同的主键abc,对于code_col值为12,从amt_col值10 (即1000)减去amt_col值(即10)。因此,最终值为0应在上表的第三行中更新。
  3. 对于相同的主键abc,对于13的code_col值,从amt_col值10 (即1000)减去amt_col值(即20)。因此,最终值是-865 (剩余的)应该在上表的第四行/最后一行中更新。

结果如下:

代码语言:javascript
运行
复制
 1. id_pk | col1| col2
 2. abc   | 10  | 0
 3. abc   | 11  | 0
 4. abc   | 12  | 0
 5. abc   | 13  | -965

希望这是清楚的。我需要在Teradata中实现这个验证(Query / Cursor / StoredProcedure /宏/任何其他的东西也是受欢迎的。

如果文本显示得如此粗体,请复制粘贴在Notepad++中的内容,就像我在这里发布的内容一样。

EN

Stack Overflow用户

发布于 2019-07-09 11:18:17

这是一个通用逻辑,您可以将其转换为Teradata语法。

代码语言:javascript
运行
复制
SELECT id_pk,
code_col col1,
CASE 
    WHEN code_col = 13 THEN (Sum_10 - Sum_Other)
    ELSE 0
END col2
FROM your_table A
LEFT JOIN
(
    SELECT id_pk, 
    SUM(CASE WHEN code_col = 10 THEN amt_col ELSE NULL END) Sum_10,
    SUM(CASE WHEN code_col <> 10 THEN amt_col ELSE NULL END) Sum_Other 
    FROM your_table
    GROUP BY id_pk
)B ON A.id_pk = B.id_pk

或者,你也可以试试下面的逻辑-

代码语言:javascript
运行
复制
SELECT 
A.id_pk,
A.code_col col1,
CASE 
    WHEN A.code_col = 13 THEN
        (SELECT amt_col FROM your_table WHERE code_col = 10 AND id_pk = A.id_pk)
        -
        (SELECT SUM(amt_col) FROM your_table WHERE code_col <> 10 AND id_pk = A.id_pk)
    ELSE 0
END col2
FROM your_table A
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56939796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档