在您的評論中,您指出彼得在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 |
+-------+------------+--------+-------------+---------+---------+-----------+
什麼版本的SQL Server ...你可以顯示預期的輸出會是怎樣的考驗您提供的數據? – scsimon
謝謝我使用的是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。這是一個視圖和工作時間計算部分。 –
雖然彼得當天有7.4的求證,對嗎? – scsimon