微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将一个表与另一个表连接起来,然后计算非空列并将它们按其他两个字段分组?

如何解决如何将一个表与另一个表连接起来,然后计算非空列并将它们按其他两个字段分组?

(我在添加表格时遇到了一些问题,因为它们被视为代码。已添加标签作为代码以包含它)

我有一个包含很多列的表格(示例中只有几列)

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     

如果应用于您问题中的样本数据 - 输出为

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。