sql - 按第一行进行 PROC SQL/SQL 多连接
问题描述
我有 3 个数据集,我希望在第一行加入它们,因为它们处于不同的级别。我将基础数据集指定为(另外 2 个将被连接到基础数据集):
item state county by_county
Apple MD aa 4
Apple DC bb 3
Apple DC cc 2
Pear VA cc 6
第二个数据集:
item state by_state
Apple MD 4
Apple DC 5
Pear VA 6
第三个数据集:
item by_item
Apple 9
Pear 6
我希望加入数据集以得到如下输出:
item state county by_county by_state by_item
Apple MD aa 4 4 9
Apple DC bb 3 5
Apple DC cc 2
Pear VA cc 6 6 6
您可以按项目、州和县排序,以确定第一行。此连接在 SAS 环境中,因此分区方式可能不起作用。(我不确定)
我不能使用左连接,因为我只需要逐级保留一条记录。例如,输出数据集保留缺失,因为我只需要所有州或县的一个项目计数 (by_item)。
出于某种原因,人们坚持我应该发布我知道它不会提供正确结果的查询:
select a*,b*,c*
from table1 as a
left join table2 as b
on a.item = b.item and a.state = b.state
left join table3 as c
on a.item = c.item;
谢谢!
解决方案
只是考虑问题的另一种方式。如果期望目标表如下所示,那么它甚至不会破坏值的含义。
item state county value
Apple MD aa 4
Apple DC bb 3
Apple DC cc 2
Pear VA cc 6
Apple MD ANY 4
Apple DC ANY 5
Pear VA ANY 6
Apple ANY ANY 9
Pear ANY ANY 6
上述结果可以通过以下方式简单实现UNION ALL
:
(SELECT
item,
state,
county,
by_county as value
FROM tbl_level3)
UNION ALL
(SELECT
item,
state,
"Any" as county,
by_state as value
FROM tbl_level2)
UNION ALL
(SELECT
item,
"Any" as state,
"Any" as county,
by_item as value
FROM tbl_level1);
推荐阅读
- ffmpeg - ffmpeg 无法提取所有帧
- javascript - 提交时在客户端验证失败时关闭静态背景模式
- html - 背景视频覆盖了 HTML 标题标签
- c# - 如何在动作过滤器中正确读取 HttpRequest 的正文
- lazarus - Lazarus 循环播放音乐
- javascript - 来自 Action Creator 的 history.push() 将更改 URL 但不会导航到页面
- oracle - 比较日期时,从其他表中选择日期的列与日期的总和给了我错误的答案
- php - 使用php输出SQL数据时实现网格
- c++ - 如果读取元素,是否完全加载数组?(我基本上是在刷新缓存吗?)
- php - Salesforce php 服务错误