Avatar billede koldstar Nybegynder
24. november 2005 - 14:54 Der er 5 kommentarer og
1 løsning

SQL: Få resultatet fra en subselect ind i et felt

Hej SQL-eksperter

Jeg har 2 tabeller, med følgende testdata.

Tabellen Tasks:

Task_id      tekst
1        aktivitet 1
2        aktivitet 2


Tabellen Obstructions

Obs_id      tekst        task_id
11          obs 1        1
12          obs 2        1

Task_id i opbstructions-tabellen peger på task_id i task-tabellen. Dvs jeg kan have flere obstructions til en task.

Mit problem er at jeg gerne vil kunne udskrive min tasktabel

således:

Task_id      tekst          obs_text
1        aktivitet 1        obs 1, obs 2 
2        aktivitet 2

dvs, jeg skal have lavet en subselect der udskriver alle obstructions for en given task med komma i mellem.

Jeg kan få det til at virke, hvis jeg laver en slect der returnerer en top 1, men hvordan får jeg flere resulateter med??
Avatar billede Slettet bruger
24. november 2005 - 18:47 #1
Det kan du ikke lave med et select - et subselect til en kolonne må kun returnere ét resultat.
Avatar billede the_bma_man Nybegynder
24. november 2005 - 18:58 #2
Du kan med fordel bruge en cursor til det

lav det "yderste" select i en cursor - while-løkke med fetch, og så for hver record her en select på nummer to.
Avatar billede koldstar Nybegynder
25. november 2005 - 08:34 #3
the_bma_man> Kan du evt. give et eksempel? Gerne med mine simple data :-)
Avatar billede venne Nybegynder
25. november 2005 - 09:53 #4
Hvis du kan leve med at have en function så er her en relativt elegant løsning:

-- En udf der returnerer en kommasepareret liste af obstructions for en task

CREATE FUNCTION dbo.obstruction_list(@task_id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @s varchar(8000)

SELECT @s = ISNULL(@s+ ',', '') + tekst
FROM Obstructions
WHERE task_id = @task_id

RETURN @s
END
-----


Den kan så kaldes sådan her:

SELECT Task_id, tekst, dbo.obstruction_list(Task_id)
FROM Tasks
Avatar billede koldstar Nybegynder
25. november 2005 - 10:15 #5
venne> Det ser godt ud. Det prøver jeg lige.
Avatar billede koldstar Nybegynder
25. november 2005 - 11:03 #6
Det virker også helt perfekt... Tak for hjælpen.
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