SQL Server:基于其他列的新列

时间:2017-08-10 15:30:00

标签: sql-server tsql

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

我的数据如下所示:

enter image description here

每行代表一天中的一个人。

y -= y.max() # invert y axis so (0,0) is in the bottom left corner根据i = np.argsort(x); x, y = x[i], y[i] # Sort data by x列计算:

import numpy as np
import scipy as sp

我想计算一下每个学校每天工作时间总计没有工作的小时数百分比。例如,如果10个人在一所学校工作一小时一天,它就会有74个工作小时,如果一个人当天生病,它会给出(7,4%74 * 100)10%(工作时间计算)基于部分专栏)

1 个答案:

答案 0 :(得分: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 |
+-------+------------+--------+-------------+---------+---------+-----------+