Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hjälp med rekursion

Postades av 2003-07-31 15:24:19 - Daniel Rådesjö, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 704 personer

Skulle behöva ha hjälp med detta träd problem:

Har en tabell som har dessa fält -> {ID,ParentID,Namn}

Ex. på innehåll:
1,0,'Root'
2,1,'Alt1'
3,1,'Alt2'
4,2,'Alt1.1'

En trädstruktur alltså!

Skulle vilja ha en rekrsiv fråga som returnerar en tabell som ser ut ex. så här:
'Root\Alt1\Alt1.1'
'Root\Alt2'

Letar alltså upp löven i trädet och tar med sig alla föräldrarna uppåt i hierarkin.


Svara

Sv: Hjälp med rekursion

Postades av 2003-07-31 17:04:24 - Kalle Dahlberg

Hej!

Hoppas du har SQL 2000, annars funkar inte lösningen nedan, då den bygger på en rekursiv UDF.

Lösningen här skapar strängar för varje leaf-node.

Skapa följande funktion: (OBS jag har kallat din tabell tbl)

create function rec (@par int)

RETURNS varchar(1000)

AS

begin
declare @str varchar(1000),
@parentid int

select @str=namn, @parentid=parentid
from tbl where id=@par

if @parentid > 0
select @str=dbo.rec(@parentid) + '\' + @str

return @str
end

Sen är det bara att anropa den för varje leaf-node på följande sätt:

select dbo.rec(id)
from tbl
where id not in (select parentid from tbl)

Om du vill ha det i "äkta" tabellform så blir det något struligare, men säg till i så fall så skall jag försöka knåpa ihop något :)


Svara

Sv: Hjälp med rekursion

Postades av 2003-08-01 08:17:10 - Daniel Rådesjö

Precis som jag ville ha det!

Tackar!


Svara

Sv: Hjälp med rekursion

Postades av 2003-08-01 10:40:25 - Andreas Hillqvist

Behöver man göra funktionen rekursiv? Tar inte det mer resurser?

KAn inte testa, met typ något sånt här:
<code>
CREATE FUNCTION rec (@par int)

RETURNS varchar(1000)

AS

BEGIN
DECLARE @str varchar(1000)
DECLARE @namn varchar(20) //Skall ha samma storlek som kolumnen
DECLARE @parentid int
DECLARE @flag bit

SELECT @str = namn, @parentid = parentid, @flag = 1
FROM tbl
WHERE id = @par

WHILE @flag = 1
BEGIN
SET @flag = 0

SELECT @str = namn + '\' + @str, @parentid = parentid, @flag = 1
FROM tbl
WHERE id = @parentid
END

RETURN @str
END
</code>


Svara

Sv: Hjälp med rekursion

Postades av 2003-08-01 11:03:25 - Kalle Dahlberg

Vet ej vilket som tar mest resurser. SQL Server är ju varken bra på iteration eller rekursion. Nackdelen med den rekursiva varianten är i och för sig att SQL Server bara klarar 32 stegs rekursion (tror jag). Fastnade väl lite på ordet "rekursiv" i frågan =)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 614
27 953
271 709
454
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies