webForumDet fria alternativet
Logga in / Bli medlem

Common Table Expressions i sql server 2005

Databaser & SQL

2 svar · 336 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Trådstart#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? :)

Medlem sedan juni 200032 967 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?

Medlem sedan juni 20003 076 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
256 ms totalt · 4 externa anrop · v20260731065814-full.50d4b5bd
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)