【发布时间】:2011-02-12 21:15:02
【问题描述】:
我得到了这张桌子:
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 个子查询的想法,但如果它的更多数据匹配在一起,这将不起作用)
你们中有人有想法吗?
【问题讨论】:
-
你能告诉我们你想要退回什么吗?您是否希望所有“在一起”的东西都返回?如果是这样,是否会返回第 1-4 行和第 5-6 行,从而返回所有行?
-
我的帖子的底部是我现在拥有的。是的,如果我第二次使用脚本,我希望第 1-4 行返回第 5-6 行等...(选择后有更新。)我认为来自
Vincent Malgrat的答案是完美的如果我可以锁定选定的行。
标签: sql oracle stored-procedures plsql