sql如何将一行拆分成多行

时间:2016-03-14 19:03:14

标签: sql sql-server tsql

我们有一个表,我想将该表中的一行拆分成多行。 如果你在下面看到。那是我桌子上的一排。我们正在计算资源加载,我想将此行拆分到结果表中,如下图所示。

我将负责计算周开始日期和时间,告诉我如何在sql server 2005中将行拆分为多行。

MyImage

在这个例子中,大卫从3月3日到3月19日工作了25个小时。

这意味着如果我们按工作周数划分,则为2周。

从3月7日开始的一周到3月11日结束的一周,然后是从3月14日到3月18日结束的一周。

根据工作天数与工作天数的比例分割小时数。

1 个答案:

答案 0 :(得分:0)

你可以做的是有一个包含周项目的表格,如

CREATE TABLE WeeKDays ( WeekStartDate date, WeekEndDate date);

现在加入你的表,如

SELECT 
 Task_ID,Name, WeekStartDate, WeekEndDate
-- Add logic for splitting hours
, (hours/workdays)* 
 CASE 
     WHEN  (T.StartDate >= W.WeekStartDate AND T.StartDate <= W.WeekEndDate) THEN DATEDIFF(d,T.StartDate,W.WeekEndDate)
     WHEN  (T.EndDate >= W.WeekStartDate AND T.EndDate <= W.WeekEndDate) THEN DATEDIFF(d,W.WeekStartDate,T.StartDate)
     WHEN  (T.StartDate <W.WeekStartDate AND T.EndDate>W.WeeKEndDate) THEN 7
--assuming 7 working days
END as Hours

FROM Tasks T LEFT JOIN WeekDays W ON 
(T.StartDate >= W.WeekStartDate AND T.StartDate <= W.WeekEndDate)  
 OR (T.EndDate >= W.WeekStartDate AND T.EndDate <= W.WeekEndDate) 
 OR (T.StartDate <W.WeekStartDate AND T.EndDate>W.WeeKEndDate)