konto usunięte

Temat: Problem zamiana wierszy na kolumny

Cześć mam taki problem chciałbym wstawić wartość pierwszego wiersza jako kolumnę dla poniższego przykładu (postaram sie to odzwierciedlić).
a,b,c,d,e,f to kolumny
kolumna a zawiera zmienną A i B interesuje mnie przeniesienie współrzędnych Ac czyli wartości A2 dla zmiennych B i to ma byc taka pentelka gdzie poczatkiem jest zawsze wspólrzędna A

Jest

a b c d e f
A A1 A2 A3 A4 A5
B 1 2 3 4
B 5 6 7 8
B 9 10 11 12
B 13 14 15 16
A A6 A7 A8 A9 A10
B 17 18 19 20
B 21 22 23 24
B 25 26 27 28
B 29 30 31 32
itd...

Ma być


a b c d e f
A A1 A2 A3 A4 A5
B 1 2 3 4 A2
B 5 6 7 8 A2
B 9 10 11 12 A2
B 13 14 15 16 A2
A A6 A7 A8 A9 A10
B 17 18 19 20 A7
B 21 22 23 24 A7
B 25 26 27 28 A7
B 29 30 31 32 A7
itd....


myślałem o napisaniu jakies procedury która będzie mi wstawiała wartość Ac jako parametr po każdym A...

Jest może jakas funckja wbudowana na oraclu bądź macie inne pomysły
Patryk Sosiński

Patryk Sosiński Architekt,
Specjalista GIS,
Programista

Temat: Problem zamiana wierszy na kolumny

Jeśli dobrze zrozumialem. Jeśli istnieje klucz główny tej tabeli z kolejno ponumerowanymi id (jak nie to mozna zrobic order by). Taka funkcja powinna załatwić sprawę (tylko tabela2 zamienić na odpowiednią nazwę).

CREATE OR REPLACE PROCEDURE proc IS
BEGIN
for rec in (select c, id from tabela2 where a = 'A') loop
UPDATE tabela2 set f = rec.c where id > rec.id and id < (select id from tabela2 where a = 'A' and id > rec.id and rownum = 1);
end loop;

END proc;
/

Dla każdego wiersza gdzie jest kolumna a = 'A' wykonujemy update tej samej tabeli ustawiając kolumne f = kolumna c wiersza gdzie a='A'. Update jednak wykonujemy tylko dla id > rec.id czyli id wiersza gdzie a='A' ale id < niż id kolejnego wiersza gdzie a= 'A'.

Ta funkcja nie załatwi tylko update ostatnich wierszy gdyż wtedy podzapytanie (select id from tabela2 where a = 'A' and id > rec.id and rownum = 1) nic nie zwraca. Ostatnie wiersze można poprawić ręcznie, a ja później spróbuje to poprawić.Patryk Sosiński edytował(a) ten post dnia 22.10.09 o godzinie 19:59
Patryk Sosiński

Patryk Sosiński Architekt,
Specjalista GIS,
Programista

Temat: Problem zamiana wierszy na kolumny

Znalazłem chwilę. Poniżej funkcja powinna działać dla wszystkich wierszy:

CREATE OR REPLACE PROCEDURE proc IS

i number := 0;
BEGIN

select max(id) into i from tabela2 where a = 'A';

for rec in (select c, id from tabela2 where a = 'A') loop
if ( i = rec.id) then
update tabela2 set f = rec.c where id > rec.id;
else
UPDATE tabela2 set f = rec.c where id > rec.id and id < (select id from tabela2 where a = 'A' and id > rec.id and rownum = 1);
end if;

end loop;

END proc;
/

Dodałem warunek jeśli jest to ostatnie A to ma zrobić update do końca.

konto usunięte

Temat: Problem zamiana wierszy na kolumny

Dzięki bardzo sprawdze jak to bedzie się miało do moich danych

konto usunięte

Temat: Problem zamiana wierszy na kolumny

Ok działa jest wporzadku. Dzieki bardzo

Następna dyskusja:

[Oracle 10g] Zamiana dynami...




Wyślij zaproszenie do