Avatar billede lbaad Nybegynder
14. februar 2005 - 09:36 Der er 7 kommentarer og
1 løsning

Spørgsmål til formatering af SQL resultat

Hej eksperter

Er det muligt, at formatere et sql output til at skrive resultatet henad istedet for nedad??

Mvh
Lars
Avatar billede trer Nybegynder
14. februar 2005 - 19:34 #1
Det lyder som om du gerne vil have en pivot tabel - der er ikke rigtig nogen smarte metoder med mindre du kører Oracle Discover. Men en mulig løsning kan du finde her

http://www.oracle.com/technology/oramag/oracle/02-sep/o52sql.html

Mvh
Troels
Avatar billede lbaad Nybegynder
15. februar 2005 - 14:58 #2
Det er ikke en pivot tabel, som jeg er ude efter.
Det som jeg vil have er et resultat, som giver mig f.eks.
forhandlere nedad
og
måneder henad.
/Lars
Avatar billede trer Nybegynder
15. februar 2005 - 19:29 #3
Jeg forstod det at du ville have resultatet sådan at din tabel bliver roteret 90 grader (kolonner bliver til rækker og vice versa). Det er netop en af mulighederne ved en pivot-tabel.
Avatar billede lbaad Nybegynder
16. februar 2005 - 08:14 #4
Ja, det er rigtigt nok, at jeg vil have det på den måde, men jeg vil kunne se alle resultater, og ikke kun enkelte, som jeg kan selectere i en pivot tabel
Avatar billede olet Nybegynder
24. februar 2005 - 12:25 #5
Du kunne jo bygge kolonnerne til dit SQL statement op dynamisk og derefter udføre det byggede statement.
Avatar billede lbaad Nybegynder
09. marts 2005 - 15:11 #6
Undskyld den lange svartid.

Jeg ved ikke helt, hvad du mener med at bygge et statement dynamisk op, men det kan du måske forklare mig.
Avatar billede trer Nybegynder
09. marts 2005 - 23:01 #7
Lav en tablefunktion hvor du (med PL/SQL) opbygger et nyt statement i en varchar-variabel. Det nye statement er den select som pivoterer din tabel.  I din tablefunktion fyrer du så det statmement af med en execute.

Du kalder så din tablefunktion med en SELECT pivot(evt. parametre) FROM DUAL; - derved får du Oracle til at returnere et resultatset fra en procedure/funktion uden at skulle gennem alt det med at erklære en cursor.

Jeg er desværre blevet totalt rusten i at skrive PL/SQL (har ikke gjort det seriøst i 2-3 år) - så nedenstående er ren pseduo-kode (syntaksfejl etc etc), men måske kan det bringe dig på vej:

create or replace function Pivot
returns table
as
begin
  declare v_sql varchar(8000)
  v_sql:='select '
  /* så laver du de selects der laver din pivotering og concatter det til din v_sql streng - og derefter afslutter du strengen */

  v_sql:=v_sql||' from dual;'
  /* Så fyres den af og du skal samle resultatsættet op og returnere fra funktionen */
  return exec (v_sql)
end
/
 
Men ... forvent ikke den helt store performance af noget som ovenfor...
Avatar billede lbaad Nybegynder
13. april 2005 - 10:41 #8
Jeg har gjort det, at jeg manuelt har lavet tabellen, og så opdaterer jeg tabellen en gang om måneden med en update via en hjælpetabel.
Lukker spm.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester