2012-10-06 102 views
-1

我有一個名爲「MIVTable」,其具有以下記錄表,拆分表成2個或多個表基於列的值

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

在這裏,我需要將上面的表存儲到兩個表如「HeaderTbl」 以及基於MIVID如下 「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裝置,然後4行,應根據所述MIVID上HeaderTbl創建。這個怎麼做?

回答

2

HeaderTblMIVTable使用插入記錄如下: (HID應該是自動增量)

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

HeaderTbl插入DetailTbl記錄和MIVTable使用:

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

Look at this SQLFiddle

在這裏,你需要使用INSERT INTO SELECT語句從一個表中插入數據到另一個。您也可以在DetailTbl這樣的陳述中使用JOIN

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