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

在此处输入图像描述

标签: sqlteradata

解决方案


您可以对 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

推荐阅读