2017-08-10 119 views
0

我想根据T-SQL中的其他列计算新列的新值。SQL Server:基于其他列的新列

我的数据是这样的:

enter image description here

的每一行代表在一天一人。

WorkHours是基于Portion列计算:

Round(FF.Portion * 7.4, 3) AS WorkHours 

我想计算的小时,这人不是一直在工作中与总workhours为每天每所学校的百分比。例如,如果一个学校有10个人在一个学校工作一天,则工作时间为74个小时,如果一个人当天病了,则会给出(7,4%74 * 100),即10%(工作时间计算基于部分专栏)

+0

什么版本的SQL Server ...你可以显示预期的输出会是怎样的考验您提供的数据? – scsimon

+0

谢谢我使用的是SQL Server 2012,当我试图解释我的问题时,结果是另外3列(freeday,School和workhours)的结果。每个学校的总工作时间中没有工作日(寻求和假期)的百分比。其中一个例外:在01-01-2017学校AA,我们有7,4 +7,4 +6个工作时间,其中6个小时被注册为Peter'Seek'。结果应该是6 /(7,4 + 7,4 + 6)* 100,得出28,846。这是一个视图和工作时间计算部分。 –

+0

虽然彼得当天有7.4的求证,对吗? – scsimon

回答

0

在您的评论中,您指出彼得在2017年1月1日有6个小时为“寻求”,但实际上是7.4。考虑到这一点,我们可以计算出你的结果如下:

declare @table table (Name varchar(16), Date date, School char(2), FreedayCode int, Freeday varchar(64), Portion decimal (6,4)) 
insert into @table 
values 
('Mike','20170101','AA',-1,'AtWork',1), 
('Mike','20170201','AA',1,'Seek',1), 
('Ali','20170101','BB',-1,'AtWork',0.94594), 
('Ali','20170201','BB',-1,'AtWork',0.94594), 
('Sara','20170101','CC',2,'holiday',1), 
('Sara','20170201','CC',1,'Seek',1), 
('Peter','20170101','AA',1,'Seek',1), 
('Peter','20170201','AA',1,'Seek',1), 
('Nina','20170101','AA',-1,'AtWork',0.81081), 
('Nina','20170201','AA',-1,'AtWork',0.81081) 

select 
     Name 
     ,Date 
     ,School 
     ,FreeDayCode 
     ,Freeday,Portion 
     ,NewColumn = sum(case when Freeday <> 'AtWork' then Round(Portion * 7.4,3) else 0 end) over (partition by Date, School)/sum(Round(Portion * 7.4,3)) over (partition by Date, School) 
from 
    @table 
order by 
    Date 
    ,School 

退货

+-------+------------+--------+-------------+---------+---------+-----------+ 
| Name | Date | School | FreeDayCode | Freeday | Portion | NewColumn | 
+-------+------------+--------+-------------+---------+---------+-----------+ 
| Mike | 2017-01-01 | AA  |   -1 | AtWork | 1.0000 | 0.355769 | 
| Peter | 2017-01-01 | AA  |   1 | Seek | 1.0000 | 0.355769 | 
| Nina | 2017-01-01 | AA  |   -1 | AtWork | 0.8108 | 0.355769 | 
| Ali | 2017-01-01 | BB  |   -1 | AtWork | 0.9459 | 0.000000 | 
| Sara | 2017-01-01 | CC  |   2 | holiday | 1.0000 | 1.000000 | 
| Peter | 2017-02-01 | AA  |   1 | Seek | 1.0000 | 0.711538 | 
| Mike | 2017-02-01 | AA  |   1 | Seek | 1.0000 | 0.711538 | 
| Nina | 2017-02-01 | AA  |   -1 | AtWork | 0.8108 | 0.711538 | 
| Ali | 2017-02-01 | BB  |   -1 | AtWork | 0.9459 | 0.000000 | 
| Sara | 2017-02-01 | CC  |   1 | Seek | 1.0000 | 1.000000 | 
+-------+------------+--------+-------------+---------+---------+-----------+ 
+0

非常感谢Scsimon。 :)太好了 –