我需要有关如何提出查询的帮助,其中表1和表2将被连接以执行计算。我有'光标'但我在概念化方面遇到了麻烦。一些kickstart将是一个巨大的帮助。
基本上我需要的是这样的东西:表1:
Rep_Date NumID NumValue Score Period
1/10/2015 1 161 4 Q1
1/11/2015 1 167 2 Q1
1/12/2015 1 95 1 Q1
1/01/2016 1 150 1 Q2
1/02/2016 1 100 2 Q2
1/03/2016 1 600 5 Q2
1/10/2015 38 1 1 Q1
1/11/2015 38 1 2 Q1
1/12/2015 38 1 2 Q1
1/01/2016 38 1 1 Q2
1/02/2016 38 1 2 Q2
1/03/2016 38 1 4 Q2
1/10/2015 113 5 3 Q1
1/11/2015 113 2 4 Q1
1/12/2015 113 8 1 Q1
1/01/2016 113 11 4 Q2
1/02/2016 113 1 5 Q2
1/03/2016 113 5 3 Q2
表2
NumID CalculationType
1 SUM
38 SUM
113 AVG
预期结果:
Rep_Date NumID Result Period
1/10/2015 1 7 Q1
1/01/2016 1 8 Q2
1/10/2015 38 5 Q1
1/01/2016 38 7 Q2
1/10/2015 113 2.67 Q1
1/01/2016 113 4 Q2
答案 0 :(得分:0)
这应该有效:
declare @t1 table (Rep_Date varchar(50), numId int, numValue int, score int, period varchar(50));
insert into @t1 values
('1/10/2015','1','161','4','Q1'),
('1/11/2015','1','167','2','Q1'),
('1/12/2015','1','95','1','Q1'),
('1/01/2016','1','150','1','Q2'),
('1/02/2016','1','100','2','Q2'),
('1/03/2016','1','600','5','Q2'),
('1/10/2015','38','1','1','Q1'),
('1/11/2015','38','1','2','Q1'),
('1/12/2015','38','1','2','Q1'),
('1/01/2016','38','1','1','Q2'),
('1/02/2016','38','1','2','Q2'),
('1/03/2016','38','1','4','Q2'),
('1/10/2015','113','5','3','Q1'),
('1/11/2015','113','2','4','Q1'),
('1/12/2015','113','8','1','Q1'),
('1/01/2016','113','11','4','Q2'),
('1/02/2016','113','1','5','Q2'),
('1/03/2016','113','5','3','Q2');
declare @t2 table (numId int, CalculationType varchar(50));
insert into @t2 values
('1' ,'SUM'),
('38' ,'SUM'),
('113' ,'AVG')
select
min(t.rep_date) Rep_Date
,t.numId
,case when max(t2.CalculationType) = 'SUM' then sum(t.score)
when max(t2.CalculationType) = 'AVG' then round(avg(1.0 * t.score), 2)
else 0
end Result
,t.period
from
@t1 t
join @t2 t2 on t.numId = t2.numId
group by
t.period, t.numId
order by
numId, period
输出