No similar operation in SQL unfortunately. Wish there was though... Good Luck. Chris
---------------------------------------------- Original Message From: "Richard Heiser"<[EMAIL PROTECTED]> Subject: Re:RE: SQL syntax for Supertypes-Subtypes AKA Circular Reference AKA Entity Tree Date: Wed, 27 Aug 2003 10:32:02 -0700 (PDT) >Um, I appreciate the response! But this is way over >my head. Does SQL Server really not have a >counterpart to Oracle's functions "START WITH" and >"CONNECT BY PRIOR"??? > >Seemed like such a simply query in Oracle: > >><CFQUERY NAME="GetEntities" >> DATASOURCE="MyDatasource"> >> > SELECT iEntityID, iSubEntityOf, sName >> > FROM Mytable >> > WHERE NOT iEntityID >> > START WITH iEntityID=1 >> > CONNECT BY PRIOR iEntityID=iSubEntityOf >> ></CFQUERY> > >Thanks! > >-Richard > > >--- Chris <[EMAIL PROTECTED]> wrote: >> Here is a stored procedure I used for an old forum >> app. Should work for >> your situation. >> >> --DROP TABLE #stack >> --DROP TABLE #x >> --DROP TABLE #y >> --CREATE PROCEDURE expand (@current int) as >> DECLARE @current int >> DECLARE @level int, @line char(20) >> DECLARE @Pos int >> DECLARE @PrevReplyTo int >> CREATE TABLE #stack (item int, Thislevel int) >> CREATE TABLE #x (ID int, Name varchar(256), >> DateCreated datetime, InReplyTo >> int, Topic int, TotalReply int, Creator int, IsTop >> bit, Root int, TopDate >> datetime, _USER_ID int, MessageFrom >> varchar(256),ThisLevel int, Position >> int) >> CREATE TABLE #y (ID int, InReplyTo int, Root int) >> SET @current = 94 >> SET @Pos = 0 >> SET @PrevReplyTo = @current >> INSERT #y >> SELECT ID,InReplyTo, Root >> FROM Threads >> WHERE Root = @current >> ORDER BY DateCreated DESC >> >> INSERT #x >> SELECT Threads.ID AS "ID", >> Threads.Name AS "Name", >> Threads.DateCreated AS "DateCreated", >> Threads.InReplyTo AS "InReplyTo", >> Threads.Topic AS "Topic", >> Threads.TotalReply AS "TotalReply", >> Threads.Creator AS "Creator", >> Threads.IsTop AS "IsTop", >> Threads.Root AS "Root", >> Threads.TopDate AS "TopDate", >> Users.ID AS "_USER_ID", >> Users.Userid AS "MessageFrom", >> 0, >> 0 >> FROM Threads,Users >> WHERE Threads.Root = @current AND Threads.Creator = >> Users.ID >> >> SET NOCOUNT ON >> INSERT INTO #stack VALUES (@current, 1) >> SELECT @level = 1 >> >> WHILE @level > 0 >> BEGIN >> IF EXISTS (SELECT * FROM #stack WHERE Thislevel = >> @level) >> BEGIN >> -- If an item on the stack exists at this level, >> grab it >> SELECT @current = item FROM #stack WHERE Thislevel >> = @level >> >> -- Increment the position >> SET @Pos = @Pos + 1 >> -- Update the table with the new position >> UPDATE #x SET Position = @Pos, ThisLevel = @level >> - 1 WHERE ID = @current >> -- Delete this entry from the temp table (#y) >> DELETE FROM #y WHERE ID = @current >> >> -- Delete this entry from the stack >> DELETE FROM #stack WHERE Thislevel = @level AND >> item = @current >> -- Insert into the stack any IDs that are replies >> to the CURRENT ID >> INSERT #stack SELECT ID, @level + 1 FROM #y WHERE >> InReplyTo = @current >> -- If any were found, increment the level >> >> IF @@ROWCOUNT > 0 >> SELECT @level = @level + 1 >> END >> ELSE >> SELECT @level = @level - 1 >> >> >> IF ((SELECT COUNT(*) FROM #y) > 0 AND (SELECT >> COUNT(*) FROM #stack) = 0) >> BEGIN >> IF @level = 0 >> SELECT @level = @level + 1 >> >> INSERT #stack >> SELECT ID, @level + 1 FROM #y >> SELECT * FROM #stack >> END >> >> END -- WHILE >> >> DROP TABLE #stack >> SELECT ID,Name,ThisLevel,Position FROM #x ORDER BY >> Position,DateCreated >> >> >> DROP TABLE #x >> DROP TABLE #y >> >> >> >> >> >> ---------------------------------------------- >> Original Message >> From: "Hagan, Ryan Mr (Contractor >> ACI)"<[EMAIL PROTECTED]> >> Subject: RE: SQL syntax for Supertypes-Subtypes AKA >> Circular Reference AKA >> Entity Tree >> Date: Wed, 27 Aug 2003 11:21:52 -0400 >> >> >I asked a very similar question a few weeks ago. >> One solution was posted >> by >> >Jochem van Dieten: >> > >> >Use a nested set model, or use a 2 table model >> where one table holds >> >complete trees in an XMLData field (which you only >> need to edit when a >> >new element is inserted) and one holds individual >> messages but with an >> >FK to the table that holds the complete trees in >> XML. >> >I usually prefer the first solution, but in some >> cases the latter >> >solution allows you to offload the whole thing to >> the client and let the >> >client figure it out using XSLT. Something like: >> >>http://spike.oli.tudelft.nl/jochemd/test/tree/test.xml >> > >> > >> >If you want more info, check out the archives. The >> thread was: >> > >> >Re: recursion in cold fusion ( was RE: Creating a >> list with infinite >> >groupings and indents ) >> > >> > >> >-----Original Message----- >> >From: Blum, Jason (SAA) >> [mailto:[EMAIL PROTECTED] >> >Sent: Wednesday, August 27, 2003 11:13 AM >> >To: CF-Talk >> >Subject: SQL syntax for Supertypes-Subtypes AKA >> Circular Reference AKA >> >Entity Tree >> > >> > >> >Hello, >> > >> >Here's a puzzle for all you 'Joe Celko' types: >> > >> >Am trying to figure out how to do on SQL Server >> something I can do in >> >Oracle. I think this problem is variously known as >> Subtypes-Supertypes, >> >Circular Reference, Entity Tree, etc... >> > >> >Given this data: >> > >> >Columns: iEntityID, iSubEntityOf, sName >> >1 1 Mary >> >2 2 1 Fritz >> >3 3 1 John >> >4 4 2 Abu >> >5 5 2 Ludwig >> >6 6 3 Abigail >> >7 7 3 Josef >> >8 8 6 Mark >> >9 9 6 Ben >> >10 10 6 Habib >> >11 11 9 Paul >> >12 12 11 Mahatma >> > >> >I want to graphically represent the tree in this >> data - i.e. Mary is the >> >boss; Fritz and John report to Mary; Abu and Ludwig >> report to Fritz; >> >etc... >> > >> >The important thing is that the SubEntityOf column >> is kind of a foreign >> >key to the primary key EntityID, such that the tree >> can be infinitely >> >deep. >> > >> >I used to be able to do this in Oracle using: >> > >> ><CFQUERY NAME="GetEntities" >> DATASOURCE="MyDatasource"> >> > SELECT iEntityID, iSubEntityOf, sName >> > FROM Mytable >> > WHERE NOT iEntityID >> > START WITH iEntityID=1 >> > CONNECT BY PRIOR iEntityID=iSubEntityOf >> ></CFQUERY> >> > >> >But I can't use these functions in SQL Server... >> > >> >Thanks! >> > >> >-Jason >> > >> > >> > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Archives: http://www.houseoffusion.com/lists.cfm?link=t:4 Subscription: http://www.houseoffusion.com/lists.cfm?link=s:4 Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4 Signup for the Fusion Authority news alert and keep up with the latest news in ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm

