0

我有一个名为“MIVTable”的表,其中包含以下记录,

    MIVID      Quantity         Value
   ------     ----------       --------
      14           10             3000
      14           20             3500
      14           15             2000
      15           20             3000
      15           50             7500
      16           25             2000

在这里,我需要根据MIVID将上面的Table存入“HeaderTbl”和“DetailTbl”两个表中,如下:

标头表:

   HID      MIVID       TotalQuantity    TotalValue
  -----    -------      -------------    -----------
    1         14               45           8500 
    2         15               70          10500
    3         16               25           2000

这里 HID 是带有标识列的主键。

详细信息表:

  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 行。这该怎么做?

4

2 回答 2

2

HeaderTbl要从使用中插入记录MIVTable:(HID应该是自动增量)

INSERT INTO HeaderTbl
    ([MIVID], [TotalQuantity], [TotalValue])
SELECT MIVID, SUM(Quantity), SUM(Value) FROM MIVTable GROUP BY MIVID;

DetailTbl要在from中插入记录HeaderTblMIVTable使用它:

INSERT INTO DetailTbl
([HID], [MIVID], [Quantity], [Value])
    SELECT H.HID, M.* 
      FROM HeaderTbl H 
INNER JOIN MIVTable M
        ON H.MIVID = M.MIVID;

看看这个 SQLFiddle

在这里,您需要使用INSERT INTO SELECT语句将数据从一个表插入到另一个表。您也可以JOIN在我为DetailTbl.

于 2012-10-06T05:42:43.973 回答
1

您将使用RANK() SQL Server 函数生成 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 函数的 Detail 表,如下所示:

SELECT 
    ROW_NUMBER() OVER (ORDER BY MIVID) AS HID, 
    MIVID, 
    Quantity, 
    Value 
FROM MIVTable
于 2012-10-06T05:36:45.877 回答