sql - sql-当其多行相同信息时,抑制金额值以获取唯一值
问题描述
抱歉标题混乱。
我在 Teradata 16.1 上,我有两张表,一张是带有 id 和数量的简单表格,另一张是带有子 ID 及其数量的详细表格。在第二个表中,数量是子 id 的拆分,构成了 id 的数量。
加入这些表时,表 A 数量正在重复(这很明显),但我只需要得到它一次,这样我就可以将该数量与其他表相协调。考虑两种解决方案(并且也向其他人开放)但不要知道如何在sql中实现。它的一切都在图像中。
有什么见解吗?
create volatile table main_table
(
id varchar(10), amount decimal(10,2) ) primary index (id) on commit preserve rows;
insert into main_table values ('A1',600); insert into main_table values ('A2',700); insert into main_table values ('A3',800);
create volatile table sub_table
(
id varchar(10), sub_id varchar(10), sub_value decimal(10,2) )
primary index (id,sub_id) on commit preserve rows;
insert into sub_table values ('A1','X1',300); insert into sub_table values ('A1','X2',300);
insert into sub_table values ('A2','Y1',700);
insert into sub_table values ('A3','Z1',200);insert into sub_table values ('A3','Z2',300);insert into sub_table values ('A3','Z3',300);
解决方案
您可以对 sub_table 中的行进行编号以识别第一个并将 main_table 金额隐藏在其他人身上
WITH
s as (
select ROW_NUMBER() over (partition by id order by subid) n, *
from sub_table
)
select m.id main_id, case when n = 1 then m.value else 0 end main_value, s.id sub_id, s.value
from main_table m
join s on m.id=s.id
结果
main_id main_value sub_id value
A1 600 A1 300
A1 0 A1 300
A2 700 A2 700
A3 800 A3 200
A3 0 A3 300
A3 0 A3 300
推荐阅读
- php - 图像未出现,img base64 解码不起作用
- javascript - 如何 Vue 让输入值 v-model 与 v-bind:value 操作
- python - 仅选择从第一到最后的指定行数或随机选择列的给定值
- javascript - JavaScript 中的正则表达式替换,其中某些部分保持不变
- javascript - 为什么这个本地存储代码不起作用?
- single-sign-on - 带有额外字段的 CAS 5.3 登录屏幕修改
- python - 如果 Python Pandas 中的值介于两次之间,则向单元格添加“1”
- amazon-web-services - 有没有一种简单的方法可以在 docker 容器中使用主机资源(例如 AWS-CLI)?
- javascript - 输出如何在数组中有 4 个项目?
- angular - 如何将角度谷歌图表获取到 puppeteer