如何解决如何将一个表与另一个表连接起来,然后计算非空列并将它们按其他两个字段分组?
(我在添加表格时遇到了一些问题,因为它们被视为代码。已添加标签作为代码以包含它)
月 | col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|---|
2021.06 | 87 | 987 | 987 | 87 | |
2021.06 | 86 | 09 | 65 | ||
2021.06 | 09 | 65 | |||
2021.06 | 09 | ||||
2021.05 | 85 | 09 | 65 | ||
2021.05 | 85 | 09 | |||
2021.05 | 87 | 09 |
我还有第二个表,其中包含与上表中的 ID 编号相关的附加信息:
id | 分支 | 信息1 | 信息2 |
---|---|---|---|
85 | branch1 | test4 | test5 |
86 | branch1 | test3 | |
87 | branch2 | 测试2 | |
987 | 测试1 | ||
09 | branch3 | 测试1 | |
65 | branch1 | 测试1 |
我需要找到一个简单的方法加入信息,统计非空列的数量并按月份和分支进行分组。结果应该是这样的
月 | 分支 | col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|---|---|
2021.05 | branch1 | 2 | 0 | 0 | 0 | 1 |
2021.05 | branch2 | 1 | 0 | 0 | 0 | 0 |
2021.05 | branch3 | 0 | 0 | 0 | 3 | 0 |
2021.06 | branch1 | 0 | 1 | 0 | 0 | 2 |
2021.06 | branch2 | 0 | 1 | 0 | 0 | 1 |
2021.06 | branch3 | 0 | 0 | 0 | 3 | 0 |
2021.06 | 0 | 0 | 1 | 1 | 0 |
我尝试过 join 和 union all,但查询变得非常大。
解决方法
考虑以下方法
select * from (
select month,branch,id,col
from table1
unpivot (id for col in (col1,col2,col3,col4,col5))
left join table2 using(id)
)
pivot (count(id) for col in ('col1','col2','col3','col4','col5'))
# order by month,branch nulls last
如果应用于您问题中的样本数据 - 输出为
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。