Avatar billede teutebod Nybegynder
13. januar 2005 - 11:51 Der er 3 kommentarer og
1 løsning

SQL output med variabelt antal kolonner

Jeg synes ikke jeg kan finde nogen let og god måde at, få lavet et data udtræk til en statestik jeg skal lave.

Jeg har en database over f.eks. nogle fodbold resultater. Der er nogle hold i en tabel. Disse hold har f.eks. et trøjemærke.. Nike, Hummel osv...
Jeg har hold af mange forskellige nationaliteter.

Nu skal jeg for hvert land, vise hvor mange % af kampene de forskellige trøjemærker vinder. Så mit output skal se ud noget lignende dette:

Land|Hummel|Nike|
DK__|___90%|_30%|
UK__|___80%|_10%|

Antallet af trøjemærker kan variere, så på en eller anden måde skal jeg dynamisk oprette min statestik tabel ud fra hvor mange trøjemærker der findes i trøje tabellen.

Den eneste løsning jeg lige selv kan se, er at jeg opretter en cursor, og render alle rækkerne i trøjetabellen igennem. Ud fra det sammensætter jeg en streng med SQL kode til at oprette/modificere kolonner i en permanent oprettet statestik tabel. Denne streng afvikler jeg med EXEC(@TableString).
Men jeg gad godt at jeg bare kunne gøre det med en table variabel, i stedet for at have en fast tabel i databasen som hele tiden ændre struktur.

En anden løsning jeg selv ser er at trække min data over i .NET og manipulere DataSet's der, hvilket ville være nemt. Men jeg ville gerne have det på SQL serveren, så andre systemer kan trække statestikkerne uden at skulle implmentere en masse logik.

Sig til hvis der er noget jeg skal uddybe :)
Avatar billede trer Nybegynder
13. januar 2005 - 12:42 #1
Det du taler om er en pivo-tabel - og eneste måde man kan lave den på i sql server er ved en cursor løsning kombineret med dynamisk sql.

Mht fast tabel - du skal blot prefixe navnet med en # - så bliver det til en temporær tabel fremfor en permanent. Den temporære tabel lever primært i ram og er så lidt hurtigere end en permanent, men giver rekompileringer af din kode (hvad din dynamiske sql alligevel gør).

query planneren har i øvrigt også en lille ups med en tabelvariabel idet den kun forventer 1 række i når den laver sin query plan.  Det har betydning for performance når man joiner på tabelvariablen.
Avatar billede teutebod Nybegynder
13. januar 2005 - 15:22 #2
Okay takker, læg et svar for points
Avatar billede teutebod Nybegynder
13. januar 2005 - 16:57 #3
Det sidste du siger, betyder det at en temp tabel er at fortrække over en tabel variabel , hvis jeg skal joine data?
Avatar billede trer Nybegynder
13. januar 2005 - 22:14 #4
Ok et svar her.

Temp-tabellen er at foretrække hvis du har "mange" rækker og har behov for en join.

Hvis du har "få" rækker eller ikke skal joine/sortere/aggregere etc så er en tabelvariabel at foretrække.

Og "mange" vs "få" - det er nok mest en smagssag / vurdering i den aktuelle situation, men lad os gribe et tal ud af luften og sige "få" betyder mindre end 50.

Mvh
Troels
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