Avatar billede stephanryer Nybegynder
16. januar 2007 - 14:46 Der er 17 kommentarer og
1 løsning

Aggregate function, der lægger strenge sammen, MS SQL 2000

Findes der en aggregate function i MS SQL, der kan gøre følgende:

Oprindeligt tabel udtræk:

testid    tekst
1        'hej'
1        'test'
2        'dummy'
2        'experimenting'

Vha. en group by på testid vil jeg så gerne have tekst-felterne slået sammen som følgende:

testid    tekst
1        'hej, test'
2        'dummy, experimenting'

Nogen der ved om en sådan aggregate findes?

På forhånd tak.
Avatar billede arne_v Ekspert
16. januar 2007 - 16:21 #1
kan jeg ike forestille mig - det er jo aldeles urelationelt

men det er jo paerenemt at lave i applikationen - skal det absolut vaere i SQL ?
Avatar billede stephanryer Nybegynder
16. januar 2007 - 16:43 #2
Pt har jeg også selv lavet det på applikationssiden, men jeg ville kunne spare 33-50% databasetrafik, hvis det blev gjort på SQl Serveren.
Avatar billede arne_v Ekspert
16. januar 2007 - 17:10 #3
du laver samme antal kald til databasen
databasen skal laese de samme antal raekker op fra disk
i ovenstaaende eksempel sparer du 16% bytes over netvaerket (fra 9+10+11+19 til 15+26)
Avatar billede stephanryer Nybegynder
16. januar 2007 - 17:37 #4
ja, men ovenstående eksempel er en forenkling af den virkelige situation. I den virkelig situation har jeg 8-10 kolonner med alt fra int til nvarchars i.

Men læg et svar. Altid noget at vide, at det ikke er muligt :)
Avatar billede a1a1 Novice
16. januar 2007 - 18:27 #5
det vil nok være muligt i sql2005
der kan du lave "aggregate-funktioner" selv, (sikkert) også en der tager et "recordset" som input og returnere en streng

;o)
Avatar billede stephanryer Nybegynder
16. januar 2007 - 18:37 #6
Yes det ved jeg, men på nuværende tidspunkt er det ikke muligt for mig at benytte 2005 :).

Men arne læg et svar pls :)
Avatar billede a1a1 Novice
16. januar 2007 - 18:42 #7
hvis du bruger storedprocedures burde det vel også være muligt at "indbygge" funktionen i din sp.
Avatar billede stephanryer Nybegynder
16. januar 2007 - 18:43 #8
sp??

Jeg bruger skam en stored procedure. Men ser ingen effektiv måde at udføre denne opgave på med almindelige funktioner.
Avatar billede a1a1 Novice
16. januar 2007 - 18:47 #9
noget ala (a1 T-SQL) ;o)

declare @varout as varchar(2000)
declare cursor for "select subitems from table"

while Read
@varout = @varout + ',' + @@cursor
end while

if len(@varout) > 0
(fjern sidste ,)
end

Men om det vil være effektivt er en anden ting...
Avatar billede arne_v Ekspert
16. januar 2007 - 18:51 #10
svar
Avatar billede arne_v Ekspert
16. januar 2007 - 18:56 #11
man kan naesten alt i en SP, men at lave streng manipulation i en SP er
normalt ikke effektivt
Avatar billede stephanryer Nybegynder
16. januar 2007 - 19:27 #12
Hvad er en sp?
Avatar billede a1a1 Novice
16. januar 2007 - 19:38 #13
"sp??
Jeg bruger skam en stored procedure. Men ser ingen effektiv måde at udføre denne opgave på med almindelige funktioner."
sp~stored procedure

;o)
Avatar billede stephanryer Nybegynder
16. januar 2007 - 19:39 #14
ohhhh :) Oki. Mig der stener ;) Men ja, som arne siger, så vil en sp alene ikke kunne lave et sådan udtræk effektivt.

Jeg tror derimod en aggregate ville være det bedste bud.
Avatar billede a1a1 Novice
16. januar 2007 - 20:33 #15
?
en sp kan sagtens lave det hele

effektivt er jo "relativt" (det er alt), men hvis du bekymre dig over hvor meget data der går fra sql til webserver vil det kunne formindskes

(jeg plejer også bare at sætte "rows" sammen i applikationen)
;o)
Avatar billede stephanryer Nybegynder
16. januar 2007 - 20:34 #16
Jammen med aggregates kunne jeg også spare på CPUen. Ja, effektivitet er relativt, men så er der jo slet ingen diskussion hvis det er udgangspunktet at alt er effektivt :p
Avatar billede a1a1 Novice
16. januar 2007 - 20:44 #17
har du mere end 1 mill. records? (ca.)
ellers gør det sikkert ikke den store forskel, med mindre at din app. f.eks. for hvert "row" henter en ntext (hvor der er noget i) ud
;o)
Avatar billede stephanryer Nybegynder
16. januar 2007 - 20:45 #18
nej, der er ikke 1moi records. Men nærmere 10-20.000. Og det er en webside, hvor mange folk tilgår DBen samtidigt. Så jo, CPU-forbrug har skam også noget at sige.
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