ORACLE

5 отговора 491 прегледа
#1

ORACLE

Здравейте,

Искам да попитам, тъй като търсих много и нищо не открих, как мога да преброя редове в таблица, които съдържат едно и също. Един пример: в една колона имам 5 пъти Value1 и 6 пъти Value2 - искам да добавя още една колона която да се попълва с 1,2,3,4,5 за Value1 и 1,2,3,4,5,6 за Value2. нещо такова:
1;Value1
1;Value1
1;Value1
1;Value1
1;Value1

Благодаря предварително!!

Отговор
в отговор на nasko #2

Re: ORACLE

това, което ми идва като първа идея (може и да не е удачна)
да си направиш една процедура с луп и две seq за value1 и value2.
Щом намери стойност 1 ъпдате column_name със sevalue1.nextval....

абе не знам доколко добре обясних...
доколкото схванах искаш
1;Value1
2;Value1
3;Value1
4;Value1
5;Value1 , а не

1;Value1
1;Value1
1;Value1
1;Value1
1;Value1

Отговор
в отговор на nasko #3

Re: ORACLE

Da tochno tova mi triabva!! No neshto ne shvashtam za procedurata??
Thanks!

Отговор
в отговор на nasko #4

Re: ORACLE

ами нали ти казах първа идея...
ако го правиш ба базата данни, което е по-добре някаква процедура,
другия варият е от софтъера, който примерно пишеш (според мен по-кофти вариант)...
Хайде успех...
Утре пак съм на линия, че се боря с едни packges, triggers....

Отговор
в отговор на nasko #5

Re: ORACLE


-- тестова таблица
create table test (n number, v varchar2(10));

-- данните
insert into test values (0,'Value1');
insert into test values (0,'Value1');
insert into test values (0,'Value1');
insert into test values (0,'Value1');
insert into test values (0,'Value1');
insert into test values (0,'Value2');
insert into test values (0,'Value2');
insert into test values (0,'Value2');
insert into test values (0,'Value2');
insert into test values (0,'Value2');
insert into test values (0,'Value2');

-- поставяме уникални номера
update test set n=rownum;

-- преномерация
update test t1 set n=1+n-(select min(n) from test where v=t1.v) ;

-- проверка
select * from test order by v,n;

N V
1 Value1
2 Value1
3 Value1
4 Value1
5 Value1
1 Value2
2 Value2
3 Value2
4 Value2
5 Value2
6 Value2

drop table test;


Отговор
в отговор на eмил #6

Re: ORACLE

Съжалявам, но написаното от мен по-горе не е вярно :(
усетих се вече след като го изпратих.

Затова бързам да се поправя :)

Ето така вече ще стане (със същата примерна таблица)


begin
for cr in ( SELECT distinct v FROM test) loop
update test set n=rownum where v=cr.v;
end loop;
end ;


Отговор