webForumDet fria alternativet

Common Table Expressions i sql server 2005

2 svar · 336 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 100 inlägg
#1

Yoo!

Håller på att testa lite CTE (Common Table Expressions) i sql server 2005.
http://msdn2.microsoft.com/en-us/library/ms186243.aspx
http://64.233.183.104/search?q=cache:EzSjCcmdVFsJ:www.4guysfromrolla.com/webtech/071906-1.shtml+cte+recursive+"sql+server+2005"&hl=sv&gl=se&ct=clnk&cd=5

Det verkar ju riktigt fiffigt, en fundering bara, jag tycker sorteringen blir fel.
Ex.

WITH KeyList (KeywordId, ParentKeywordId, Keyword, Level)
AS
(
    -- Anchor member definition
    SELECT k.KeywordId, k.ParentKeywordId, k.Keyword, 0 AS Level
    FROM Keywords AS k
    WHERE k.ParentKeywordId IS NULL
    UNION ALL

    -- Recursive member definition
    SELECT k.KeywordId, k.ParentKeywordId, k.Keyword, Level + 1
    FROM Keywords AS k
    INNER JOIN KeyList AS d
        ON k.ParentKeywordId = d.KeywordId
)

-- Statement that executes the CTE
SELECT KeywordId, ParentKeywordId, Keyword, Level
FROM KeyList

Med koden får jag resultatet:

1	NULL	guyg         0
2	1	fgdfgdfg      1
3	1	guygu         1
4	2	hgvhgv       2
5	2	cfcgfcgf      2
6	4	fbvvnbv      3

Sorteringen blir alltså på Level, men jag skulle vilja få det så här:

1	NULL	guyg         0
2	1	fgdfgdfg      1
4	2	hgvhgv       2
6	4	fbvvnbv      3
5	2	cfcgfcgf      2
3	1	guygu         1

Sorteringen är nu på en tråds helhet, dvs. kedjan bryt inte (eller hur man nu ska förklara).

Nån som kan nått powerplayertrick för detta? :)

@ndersMedlem sedan juni 200026 914 inlägg
#2

Eftersom du inte angett ORDER BY någonstans får du tillbaka posterna i den ordning SQL Server är sugen på att leverera posterna i.

Ett poweplayertrick är väl att alltid ange ORDER BY om man önskar en viss sortering?

Jag förstår dock inte helt logiken i den ordning du skulle vilja ha, kanske du kan försöka förklara?

doggelitoMedlem sedan juni 20003 100 inlägg
#3

Logiken är en helt vanlig hirearkisk sortering, alla siffror förvirrar det hela bara! :)
Jag visar en bild istället!

Hittade även denna:
http://groups.google.se/group/microsoft.public.sqlserver.programming/browse_thread/thread/497d4456e4417da3/1378d1c01dbdf75c?lnk=st&q=cte+recursive+"sql+server+2005"&rnum=8&hl=sv#1378d1c01dbdf75c

Jag har inte hunnit testa koden i länken ovan än men det verkar vara det jag är ute efter! :)
(blev en hel del mer kod bara!)

print.gif
Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb