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??
Annonceindlæg fra Infor
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.
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.
25. november 2005 - 08:34
#3
the_bma_man> Kan du evt. give et eksempel? Gerne med mine simple data :-)
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
25. november 2005 - 10:15
#5
venne> Det ser godt ud. Det prøver jeg lige.
25. november 2005 - 11:03
#6
Det virker også helt perfekt... Tak for hjælpen.
Computerworld tilbyder specialiserede kurser i database-management