0

次のレコードを持つ「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」などの 2 つのテーブルに格納する必要があります。

ヘッダーテーブル:

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

ここで、HID は ID 列を持つ主キーです。

詳細テーブル:

  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

HeaderTblfromにレコードを挿入するには、これをMIVTable使用します: (HID自動インクリメントである必要があります)

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

DetailTblfromにレコードを挿入してこれ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 関数を使用して詳細テーブルを作成します。

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