我有两个要加入的表:
表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,并按出现的次数Date,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
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
您可以尝试此查询
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
答案 1 :(得分:0)
此查询有效吗?
SELECT a.date,
a.gran1,
a.gran2,
a.gran3,
b.value1/gran_count AS value1,
b.value2/gran_count AS value2
FROM table_a a
INNER JOIN table_b b
ON (a.date = b.date
AND a.gran1 = b.gran1
AND a.gran2 = b.gran2)
INNER JOIN (
SELECT date, gran1, gran2, count(*) AS gran_count
FROM table_a
GROUP BY date, gran1, gran2
) sub ON (a.date = sub.date
AND a.gran1 = sub.gran1
AND a.gran2 = sub.gran2);
我现在无法访问SQL,因此无法验证数据(即使我错过了语法内容),但是我试图查找日期/的每个组合的COUNT个在子查询中使用gran1 / gran2,然后在主查询的分区中使用它。
table_b和子查询(我称为“ sub”)都连接到table_a。
使用两个联接而不是三个联接来执行此查询可能是一种更有效的方法,但是现在没有任何想法。