2016-12-16 76 views
-3

考慮表工資總額按年度/季度基礎上每年每各季度最高序列號和

employee id report_year report_quarter sequencenumber quarter1_wage quarter2_wage 
101    2015  1    1    1000   0 
101    2015  1    2    2000   0 
102    2016  2    1    3000   0 
102    2016  2    2    0   4000 

查詢的結果必須是

 Total wages 

     6000 

正如在2015年員工號101最高序列號2具有2000到第四季度,因爲報告_季度表示它是1需要添加取這個值並添加到

2016序號最高的員工id 102有4000 arter2_wage) 由於報告_quarter表明它是2

+0

那你試試? – Lexi

回答

0

我真的不明白你爲什麼要這樣總結,但忽略了你將在各個方面進行彙總,因此名稱「總工資」是錯誤的領導,這是你如何實現這一目標。

--Assign a row number per employee based off the sequence number. 
--This will assign 1 to the highest sequence number for each employee 
with cte as(
    select 
     *, 
     ROW_NUMBER() over (partition by [employee id] order by sequencenumber desc) as rn 
     from yourTable) 


--Sum and add the two quarters for all employees where the row number = 1 
--Which is the highest sequence 
select 
    sum(quarter1_wage) + sum(quarter2_wage) as TotalWages 
from cte 
    where rn = 1 
0

你有沒有嘗試過這樣的事情:

WITH cte0 AS(
SELECT 101 AS employeeid,2015 AS report_year,1 AS report_quarter,1 AS sequencenumber,1000 AS quarter1_wage,0 AS quarter2_wage union all 
SELECT 101    ,2015    ,1     ,2     ,2000     ,0     union all 
SELECT 102    ,2016    ,2     ,1     ,3000     ,0     union all 
SELECT 102    ,2016    ,2     ,2     ,0     ,4000   
), 
cte1 as(
SELECT employeeid,report_year,report_quarter,MAX(sequencenumber) AS maxseqnum 
FROM cte0 
GROUP BY employeeid,report_year,report_quarter) 
SELECT SUM(quarter1_wage+quarter2_wage) AS [Total wages] 
FROM cte0 c0 
    INNER JOIN cte1 c1 
     ON c0.report_year = c1.report_year AND c0.report_quarter = c1.report_quarter AND c0.employeeid = c1.employeeid AND c0.sequencenumber = c1.maxseqnum 
相關問題