Avatar billede angelenglen Nybegynder
14. oktober 2011 - 13:08 Der er 9 kommentarer og
1 løsning

Returner id'er fra flere rows som en komma-sepereret streng

Jeg har brug for at kunne få en række ID'er ud, men i stedet for flere rows i mit resultset, har jeg brug for én row med id'erne kommasepereret.

Eksempel:

SELECT I.id FROM items I, itemgroups G WHERE g.id = i.groupId AND g.id = 15 ORDER BY I.id DESC

Det giver mig et resultat der ser således ud:
1
5
7
9

Altså 4 rows med et tal (integer) i hver.

Det output jeg har brug for er:
'1,5,7,9' som en string.

Hvordan skal jeg ændre min query for at opnå det?
14. oktober 2011 - 14:10 #1
Prøv

SELECT GROUP_CONCAT(I.id) FROM items I, itemgroups G WHERE g.id = i.groupId AND g.id = 15 GROUP BY I.id ORDER BY I.id DESC
Avatar billede angelenglen Nybegynder
14. oktober 2011 - 14:48 #2
Jeg får bare følgende fejl:

'GROUP_CONCAT' is not a recognized built-in function name.

:-(

Det er en Microsoft SQL 2005 server det kører på.
Avatar billede Syska Mester
14. oktober 2011 - 15:04 #3
GROUP_CONCAT er vist en MySQL function.

Mener ikke SQL har nogen.

Men hvorfor vil du gøre det i databasen og ikke i dit applikation lag?
14. oktober 2011 - 15:43 #4
buzzzz, jeg tror du har ret.  Jeg kikkede ikke ordenligt på spørgsmålets kategori (tog det for mysql).  Din anbefaling, at gøre det i applikations laget, det holder jeg i dig med.
Avatar billede angelenglen Nybegynder
14. oktober 2011 - 16:24 #5
Grunden til jeg helst ville gøre det i databasen, og ikke i applikations-laget, er at jeg har en dejlig simpel funktion der bare returnerer første column af første row i et resultat, og det har indtil nu løst alle de database-opgaver mit program har haft brug for.

Derfor ville jeg gerne undgå at tilføre flere ekstra funktioner, når nu det kunne være så simpelt hvis databasen kunne klare opgaven for mig.


men foreløbig kan i da lægge et svar hver, så kan i dele points for hjælpen, hvis der ikke kommer en anden løsning (hvilket det ikke lyder til)
14. oktober 2011 - 16:52 #6
Jeg kom med en forkert løsning, så jeg passer med points.
Avatar billede Syska Mester
14. oktober 2011 - 17:23 #7
http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string

Der er sikkert flere løsninger på dette problem.

Du burde også kunne lave din egen function som lave concatanating af data.

Jeg kan godt google en løsning for dig som virker, men det burde du også selv kunne.

Google på "mssql function concat rows" og ting i den retning.
Avatar billede angelenglen Nybegynder
17. oktober 2011 - 10:55 #8
Nice! Det skal jeg nok få til at fungere.
Læg et svar for points :-)
Avatar billede Syska Mester
17. oktober 2011 - 11:00 #9
svar
Avatar billede angelenglen Nybegynder
17. oktober 2011 - 16:28 #10
Hvis nogen er interesseret, endte dette med at virke for mig:



SELECT STUFF((SELECT ',' + CONVERT(VARCHAR(10), I.id)FROM items I, Itemgroups G WHERE G.id = I.groupId G.id = 15 AND ORDER BY I.id ASC FOR XML PATH ('')),1,1,'')
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