我有一个名为“MIVTable”的表,它有以下记录,
MIVID Quantity Value
------ ---------- --------
14 10 3000
14 20 3500
14 15 2000
15 20 3000
15 50 7500
16 25 2000
在这里,我需要将上面的表存储到两个表中,例如基于MIVID的“HeaderTbl”和“DetailTbl”,如下所示:
HeaderTbl:
HID MIVID TotalQuantity TotalValue
----- ------- ------------- -----------
1 14 45 8500
2 15 70 10500
3 16 25 2000
此处HID是具有标识列的主键。
DetailTbl:
HID MIVID Quantity Value
----- ------- ------------ -------
1 14 10 3000
1 14 20 3500
1 14 15 2000
2 15 20 3000
2 15 50 7500
3 16 25 2000
假设,如果MIVTable包含4个不同的MIVID方法,则应根据HeaderTbl上的MIVID创建4行。怎么做?
答案 0 :(得分:2)
要从HeaderTbl
MIVTable
插入记录,请使用此代码:( HID
应自动增加)
INSERT INTO HeaderTbl
([MIVID], [TotalQuantity], [TotalValue])
SELECT MIVID, SUM(Quantity), SUM(Value) FROM MIVTable GROUP BY MIVID;
要从DetailTbl
和HeaderTbl
MIVTable
插入记录,请使用此处:
INSERT INTO DetailTbl
([HID], [MIVID], [Quantity], [Value])
SELECT H.HID, M.*
FROM HeaderTbl H
INNER JOIN MIVTable M
ON H.MIVID = M.MIVID;
在这里,您需要使用INSERT INTO SELECT语句将数据从一个表插入另一个表。您也可以在我对JOIN
所做的声明中使用DetailTbl
。
答案 1 :(得分:1)
您将使用RANK() SQL Server function生成HeaderTbl,如下所示:
SELECT RANK() OVER (ORDER BY MIVID) as HID, MIVID, TotalQuantity, TotalValue
FROM
(
SELECT
MIVID,
SUM(Quantity) as TotalQuantity,
SUM(Value) as TotalValue
FROM MIVTable GROUP BY MIVID
) AS A
和详细信息表使用ROW_NUMBER() SQL Server function,如下所示:
SELECT
ROW_NUMBER() OVER (ORDER BY MIVID) AS HID,
MIVID,
Quantity,
Value
FROM MIVTable