【发布时间】:2021-12-07 21:05:30
【问题描述】:
我有 2 个数据集:
dataset 1:
AMT1 AMT2 AMT3 AMT4 ID
245 955 0 955 1
245 0 245 245 1
dataset 2:
AMT1 AMT2 AMT3 AMT4 ID NAME
245 955 0 955 1 AMY
245 0 245 245 1 AMY
JOIN:
proc sql;
create table demo as
select distinct a.id,
sum(a.amT1) as exp1,
sum(a.amT2) as exp2,
sum(a.amT3) as exp3,
sum(a.amT4) as exp4,
MAX(name) as name
from dataset1 a
left join dataset2 b
on a.id = b.id
group by 1;
quit;
输出:预期
ID AMT1 AMT2 AMT3 AMT4 CUSTNAME
1 490 955 245 1200 AMY
问题: 1)n 左连接,即使我没有从 dataset2 获取数量值,它们也会被求和,输出是预期值的两倍。例如:amt 4 值变为 2400 而不是 1200。 2)如果我在 sum 中使用 distinct 函数;整行具有相同值的场景将被删除。
我该如何解决这个问题?
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于 SQL 包括 DDL 和表格初始化代码。当你得到一个你不期望的结果时,暂停你的总体目标,切到第一个具有意外结果的子表达式并说出你的期望和原因,并通过文档证明是合理的。 How to AskHelp center
-
这似乎是一个常见的错误,人们想要一些连接,每个可能涉及不同的键,一些子查询,每个可能涉及连接和/或聚合,但他们错误地尝试执行所有然后加入所有聚合或聚合以前的聚合。在适当的行上编写单独的聚合子查询和/或聚合(可能是不同的)案例语句选择连接行;然后将子查询连接在一起。 Two SQL LEFT JOINS produce incorrect result
-
请在考虑发布之前阅读手册和谷歌任何错误消息和许多清晰、简洁和精确的措辞,包括和不包括您的特定名称/字符串/数字,'网站: stackoverflow.com' & 标签;阅读许多答案。反映你的研究。请参阅How to Ask、Help center 和投票箭头鼠标悬停文本。如果您发布问题,请使用一个措辞作为标题。
-
样本数据不佳。您至少应该有一个 ID 值,它只存在于其中一张表中。