我正在查詢有關某些值的分組並將數據插入基於分組的不同表中。在Oracle中查找分組記錄
表名是DETAILS2。該表是這樣的:
NUM2 MAT_NUM TRAVEL_DT TRAVEL_TYP TRAVEL_REQ
1-7OR Rail 11-OCT-2016 Train 2
1-7OR Ground 12-OCT-2016 Bus 2
1-7OR Fly 15-0CT-2016 Flight 1
1-72R Rail 11-SEP-2016 Train 2
1-72R Ground 12-SEP-2016 Bus 3
1-72R Fly 15-SEP-2016 Flight 1
我需要通過NUM2,MAT_NUM第一組,然後由TRAVEL_REQ。
- 如果我發現MAT_NUM是Rail或Ground與TRAVEL_REQ相同,那麼我只需要在另一個表中插入一條記錄。
- 如果我發現MAT_NUM是鐵路或地面與不同的TRAVEL_REQ,那麼我需要插入兩個記錄到另一個表。
- 如果我發現MAT_NUM是Fly,那麼我只需要在另一個表中插入一條記錄。
爲了達到這個目的,我先寫了下面的代碼。但它插入所有記錄。你能幫我修改代碼嗎?
DECLARE
NUM1 VARCHAR2(50);
NXTNUM1 VARCHAR2(50);
DECIDER VARCHAR2(10);
TYP1 VARCHAR2(50);
CURSOR FET_TYP
IS
SELECT DISTINCT NUM2,
LEAD(NUM2) OVER (ORDER BY NUM2),
CASE WHEN DET.MAT_NUM NOT LIKE '%Fly%' THEN 0 ELSE 1 END DECIDER,
MAT_NUM
FROM DETAILS2
ORDER BY NUM2;
BEGIN
OPEN FET_TYP;
LOOP
FETCH FET_TYP
INTO NUM1,
NXTNUM1,
DECIDER,
TYP1;
EXIT WHEN FET_TYP%NOTFOUND;
IF ((NUM1 = NXTNUM1) AND (DECIDER = 0))
THEN
INSERT INTO TEMP1
VALUES (NUM1, TYP1, 'Ground');
ELSIF ((NUM1 = NXTNUM1) AND (DECIDER = 1))
THEN
INSERT INTO TEMP1
VALUES (NUM1, TYP1, 'Flight');
END IF;
END LOOP;
COMMIT;
CLOSE FET_TYP;
END;
以下是最終輸出的樣子。
NUM2 MAT_NUM TRAVEL_DT TRAVEL_TYP TRAVEL_REQ
1-7OR Ground 12-OCT-2016 Bus 2
1-7OR Fly 15-0CT-2016 Flight 1
1-72R Rail 11-SEP-2016 Train 2
1-72R Ground 12-SEP-2016 Bus 3
1-72R Fly 15-SEP-2016 Flight 1
這些都是與在寫入插入語句我會插入一些默認值沿着主列輸出。第一條記錄可以是鐵路或地面。 TRAVEL_REQ具有相同的值時無關緊要。
這可能沒有遊標可行。你能在TEMP1中編輯你的文章和預期的結果嗎? – Anand
在你的第一個條件(1.) - 應該插入哪條記錄?只說「只有一個」是不夠的,你必須說明哪一個。然後:在「其他表」中插入什麼 - 這個表中的行是否有相同的列?還是隻有一些列?或者完全不同的東西?另一個問題:條件(3.)是什麼意思?對於1-70R你有三種類型。其中之一是FLY。這是否意味着你只在三行中插入一行?如果是這樣,哪一個? (如果travel_req在另外兩行中不同 - 這將與條件2相矛盾。) – mathguy
1.任何人都可以插入。 2.對於1-7OR,我插入2條記錄,因爲TRAVEL_REQ是相同的。對於1-72R,我插入3條記錄,因爲TRAVEL_REQ對於所有 –