Oprettet fre. d. 14. oktober 2011 kl. 13:08:52

angelenglen
angelenglen (7.306 point. Point ude: 200)

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?

Skrevet fre. d. 14. oktober 2011 kl. 14:10:32| #1

Christian_Belgien
Christian_Belgien (43.628 point)
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

Skrevet fre. d. 14. oktober 2011 kl. 14:48:57| #2

angelenglen
angelenglen (7.306 point)
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å.

Skrevet fre. d. 14. oktober 2011 kl. 15:04:17| #3

buzzzz
buzzzz (48.826 point)
ifyoudo.net
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?

Skrevet fre. d. 14. oktober 2011 kl. 15:43:49| #4

Christian_Belgien
Christian_Belgien (43.628 point)
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.

Skrevet fre. d. 14. oktober 2011 kl. 16:24:15| #5

angelenglen
angelenglen (7.306 point)
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)

Skrevet fre. d. 14. oktober 2011 kl. 16:52:14| #6

Christian_Belgien
Christian_Belgien (43.628 point)
Jeg kom med en forkert løsning, så jeg passer med points.

Skrevet fre. d. 14. oktober 2011 kl. 17:23:06| #7

buzzzz
buzzzz (48.826 point)
ifyoudo.net
http://stackoverflow.com/ (...)

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.

Skrevet man. d. 17. oktober 2011 kl. 10:55:35| #8

angelenglen
angelenglen (7.306 point)
Nice! Det skal jeg nok få til at fungere.
Læg et svar for points :-)

Skrevet man. d. 17. oktober 2011 kl. 11:00:57| #9


Skrevet man. d. 17. oktober 2011 kl. 16:28:17| #10

angelenglen
angelenglen (7.306 point)
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,'')

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Stored procedure og triggers

Oprettet den 22. maj 2012 kl. 10.11
htm giver 60 point for svar | Giv et svar »

SELECT by NEWID

Oprettet den 14. maj 2012 kl. 10.21
zentral giver 200 point for svar | Giv et svar »

Hvor finder jeg logfiler?

Oprettet den 14. maj 2012 kl. 10.07
hundevennen giver 100 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger