簡體   English   中英

如何在SQL Server中將數據插入到具有多行到另一行的另一個表中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM