![](/img/trans.png)
[英]How to insert data into one table row from multiple table rows in another table in SQL Server 2012?
[英]How to insert data to another table with multiples rows to a single row in SQL Server?
我因這個問題被困了幾天,希望有人能給我一個主意。 先感謝您。
我的擔心是我想將數據從table2
插入table1
。 在table2
它位於行中(從day1到day2),我想在每個id中將table1作為一行插入。
ID#:01在table2中具有day1和day2。
;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
我希望有人會為您提供更整潔的解決方案,因為我也對此感興趣。 我可以解決問題的唯一方法是對匯總數據進行初始插入,然后更新各個統計信息:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.