情况
表1
Name Val1 Val2 Start End Summary
xyz 6.7 5.33 0 10 test1
xyz 7.16 4.41 10 20 test2
xyz 2.52 1.69 20 30 NULL
xyz 1 1.77 30 40 NULL
xyz 4 5.28 40 50 NULL
xyz 2.7 4.91 50 60 NULL
xyz 1.72 1.88 60 70 NULL
xyz 0.98 1.64 70 80 NULL
xyz 1.28 1.26 80 90 NULL
xyz 1.51 1.29 90 100 NULL
xyz 1.62 1.69 100 110 NULL
xyz 2.49 2.89 110 120 NULL
xyz 1.2 2.11 120 130 NULL
xyz 1.45 1.27 130 140 NULL
xyz 1.62 1.61 140 150 NULL
xyz 1.96 1.68 150 160 NULL
xyz 2.03 2.48 160 170 NULL
xyz 2.42 1.72 170 180 NULL
xyz 1.64 1.47 180 190 NULL
xyz 3.08 3.36 190 200 NULL
xyz 1.45 2.41 200 210 NULL
xyz 1.86 3.23 210 220 NULL
xyz 1.25 1.96 220 230 NULL
xyz 2.68 2.64 230 240 NULL
xyz 1.99 3.92 240 250 NULL
xyz 1.76 3.35 250 260 NULL
xyz 2.94 3.86 260 270 NULL
xyz 4.1 4.15 270 278 NULL
表2
Name Begin End Summary
xyz 0 100 test1/test2
xyz 100 200 NULL
xyz 200 278 NULL
表3(输出表)
Name Avg(Val1) Sum(Val1) Avg(Val1) Avg(Val2) Begin End Summary
xyz 1.9637 15.71 2.465 19.72 0 100 test1/test2
xyz 1.951 19.51 2.028 20.28 100 200 NULL
xyz 2.25375 18.03 3.19 25.52 200 278 NULL
我尝试了以下代码,但是没有用
select A.[Name], avg(A.Val1), sum(A.Val1), avg(A.Val2)
,sum(A.Val2), B.Start, B.End from table1 A
left join table2 B on A.Start = B.Start and A.End = B.End
where A.Name=B.Name
group by Name
答案 0 :(得分:1)
我看不到需要使用LEFT JOIN
,两个表之间的所有联接条件都应该在ON
子句中
此外,您的where子句还需要条件A.Summary is null
。 (我假设您是指表1中的Summary
)
select A.[Name],
avg(A.Val1),
sum(A.Val1),
avg(A.Val2),
sum(A.Val2),
B.Start,
B.End
from table1 A
inner join table2 B on A.Name = B.Name
and A.Start >= B.Start
and A.End <= B.End
where A.Summary is null
group by A.Name, B.Start, B.End
答案 1 :(得分:0)
您不应以相等的方式加入,应为> =和<或>和<=,具体取决于边界所在的位置。但是您需要桌子2的一端超出实际数字,因此将最后一个999或第一个-1设为1。并且因为您的名字是联接的一部分,所以请保持一致。
select A.[Name], B.Start, B.End, avg(A.Val1), sum(A.Val1), avg(A.Val2)
,sum(A.Val2), B.Start, B.End from table1 A
left join table2 B on A.Name=B.Name and A.Start >= B.Start and A.End < B.End
group by Name, B.Start, B.End