我已经因为这个问题而被困了几天,希望有人能给我一个想法。提前谢谢。
我担心的是,我想将table2
的数据插入table1
。在table2
中它是行(day1到day2),我想在table1中插入每个id的单行。
id#:01在table2中有day1和day2。
答案 0 :(得分:0)
;with sum_cte (id, name, gender, TotalOTMinis, TotalUTMins, TotalWorkMins)
as(
select id, name, gender, sum(OvertimeMins), sum(UndertimeMins), sum(WorkMins) group by id
),
day1_cte (rownum, id, day1OTMins, day1UTMins, day1WrokMins)
as(
select row_number() (over order by date) as rownum,id, OvertimeMins, UndertimeMins, WorkMins from table2 where rownum=1
),
day2_cte (rownum, id, day2OTMins, day2UTMins, day2WrokMins)
as(
select row_number() (over order by date) as rownum,id, OvertimeMins, UndertimeMins, WorkMins from table2 where rownum=2
)
insert into table1
select sum_cte.id, name, gender, TotalOTMinis, TotalUTMins, TotalWorkMins, day1OTMins, day1UTMins, day1WrokMins ,day2OTMins, day2UTMins, day2WrokMins
from sum_cte inner join day1_cte on sum_cte.id = day1_cte.id
inner join day2_cte on sum_cte.id = day2_cte
答案 1 :(得分:0)
我希望有人能为您提供更整洁的解决方案,因为我也有兴趣看到它。我能解决问题的唯一方法是对总和数据进行初始插入,然后更新各个统计数据:
DECLARE @Table2 TABLE
(
ID INT,
Name CHAR,
Gender CHAR,
Dt DATE,
OvertimeMins INT,
UndertimeMins INT,
WorkMins INT
)
INSERT INTO @TABLE2 (ID, Name, Gender, DT, OvertimeMins, UndertimeMins, WorkMins) SELECT 01, 'A', 'M', '28 Jul 2017', 30, 0, 240
INSERT INTO @TABLE2 (ID, Name, Gender, DT, OvertimeMins, UndertimeMins, WorkMins) SELECT 01, 'A', 'M', '29 Jul 2017', 60, 0, 240
DECLARE @Table1 TABLE
(
ID INT,
Name CHAR,
Gender CHAR,
TotalOtMins INT,
TotalUTMins INT,
TotalWorkMins INT,
Day1OTMins INT,
Day1UTMIns INT,
Day1WorkMIns INT,
Day2OTMins INT,
Day2UTMIns INT,
Day2WorkMIns INT
)
INSERT INTO @Table1
(ID, Name, Gender, TotalOtMins, TotalUTMins, TotalWorkMins)
SELECT ID, MIN(Name), MIN(Gender), SUM(OvertimeMins), SUM(UndertimeMins), Sum(WorkMins)
FROM @TABLE2
GROUP BY ID
UPDATE T1
SET Day1OTMins = Day1.OvertimeMins,
Day1UTMins = Day1.UndertimeMins,
Day1WorkMIns = Day1.WorkMins,
Day2OTMins = Day2.OvertimeMins,
Day2UTMIns = Day2.UndertimeMins,
Day2WorkMIns = Day2.WorkMins
FROM @Table1 T1
CROSS APPLY
(
SELECT TOP 1 OvertimeMIns, UndertimeMins, WorkMins
FROM @Table2
WHERE ID = T1.ID
ORDER BY Dt ASC
) as Day1
CROSS APPLY
(
SELECT TOP 1 OvertimeMIns, UndertimeMins, WorkMins
FROM @Table2
WHERE ID = T1.ID
ORDER BY Dt DESC
) as Day2
SELECT *
FROM @Table1