2012-10-06 3 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은 ID 열 기본 키입니다.

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 행이 HeaderTbl에 MIVID에 기초하여 생성한다. 이 작업을 수행하는 방법?

답변

2

MIVTable 사용으로 HeaderTbl에서 레코드를 삽입하려면이 : (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 
관련 문제