я получил эту таблицу:
CREATE TABLE Test_Table (
old_val VARCHAR2(3),
new_val VARCHAR2(3),
Updflag NUMBER,
WorkNo NUMBER );
и это в моей таблице:
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('1',' 20',0,0);
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('2',' 20',0,0);
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('2',' 30',0,0);
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('3',' 30',0,0);
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('4',' 40',0,0);
INSERT INTO Test_Table (old_val, new_val, Updflag , WorkNo) VALUES('4',' 40',0,0);
теперь мой стол выглядит так:
Row Old_val New_val Updflag WorkNo
1 '1' ' 20' 0 0
2 '2' ' 20' 0 0
3 '2' ' 30' 0 0
4 '3' ' 30' 0 0
5 '4' ' 40' 0 0
6 '5' ' 40' 0 0
(если значения в столбце new_val
совпадают, то они вместе и то же самое переходит к old_val
)
поэтому в приведенном выше примере строки 1-4 вместе и строка 5-6
на данный момент в моей хранимой процедуре есть курсор:
SELECT t1.Old_val, t1.New_val, t1.updflag, t1.WorkNo
FROM Test_Table t1
WHERE t1.New_val =
(
SELECT t2.New_val
FROM Test_Table t2
WHERE t2.Updflag = 0
AND t2.Worknr = 0
AND ROWNUM = 1
)
вывод такой:
Row Old_val New_val Updflag WorkNo
1 1 20 0 0
2 2 20 0 0
Моя проблема в том, что я не знаю, как получить строки с 1 по 4 одним выбором.
(у меня была идея с 4 подзапросами, но это не сработает, если их больше данных, которые совпадают вместе)
у кого-нибудь из вас есть идея?