sql - SQL中基于计数的全连接和均匀分布
问题描述
我有两个要加入的表:
表 A
Date Gran1 Gran2 Gran3
1/1/18 A B CD
1/1/18 A B EF
1/2/18 A B GF
1/2/18 A B EF
1/2/18 A B FR
1/2/18 A L EF
表 B
Date Gran1 Gran2 Value1 Value2
1/1/18 A B 100 150
1/2/18 A B 200 80
1/2/18 A L 500 30
表 B 的粒度与表 A 不同。我想将表 B 加入表 A 并通过发生日期、Gran1 和 Gran2 的出现次数分配我加入的值。
我的最终结果应该是这样的:
Date Gran1 Gran2 Gran3 Value1 Value2
1/1/18 A B CD 50 75
1/1/18 A B EF 50 75
1/2/18 A B GF 66.67 26.67
1/2/18 A B EF 66.67 26.67
1/2/18 A B FR 66.67 26.67
1/2/18 A L EF 500 30
任何帮助都会很棒,谢谢!
解决方案
你可以试试这个查询
Select a1.date1,
a1.gran1,
a1.gran2,
a1.gran3,
(b.value1/a2.xCount) as value1,
(b.value2/a2.xCount) as value2
from @tableA A1
Inner join @tableB B on A1.date1 = B.date1
and a1.gran1 = b.gran1
and a1.gran2 = b.gran1
inner join (select date1, gran1, gran2, count(*) xCount
from @tableA
group by date1, gran1, gran2) A2 on A1.date1 = A2.date1
and a1.gran1 = a2.gran1
and a1.gran2 = a2.gran2
推荐阅读
- azure - 注册 Azure App Service 应用程序以使用 Google 登录
- javascript - 从 NodeMailer 向 Swagger 发送适当的响应
- php - 有没有办法对使用 Laravel Passport 创建的访问令牌进行非对称加密?
- powershell - 如何抑制上一个命令的退出 0?
- java - 在列表中查找不常见元素的最佳方法
- ruby - Jekyll 生成器插件 - 创建文件和输出数据
- authentication - asp.net 核心数据保护 PersistKeysToAzureBlobStorage SAS 令牌
- firemonkey - 将 TMediaPlayer->Duration 转换为 min:sec (FMX)
- data-structures - 在排序的数据结构中插入多个数据字段
- javascript - Javascript 查找“/”并替换为“_”