Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Table with records 'inheriting' from parent
Message
De
07/03/2006 11:15:22
 
 
À
07/03/2006 08:22:54
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
01101776
Message ID:
01102105
Vues:
15
>>Hi,
>>
>>I posted the following in the .NET forum but it's essentially a SQL query problem so I thought I'd try here as well:
>>--------------->
>>Assume a table where each row contains the specification for a rectangle but which also may 'inherit' from a parent row. E.g.:
>>
>>ID     ParentID   Top    Left   Width    Height    Color
>>1      0          10     10     100      100       White
>>2      1          null   null   200      null      null
>>3      2          null   null   null     null      Red
>>4      1          20     20     null     null      Green
>>* where non-null values override the parent value. This means ID 3 would be:
>>                  10     10     200      100       Red
>>* ID 4 would be:
>>                  20     20     100      100       Green
>>* etc
>>
>>I had this coded in VFP using recursion to 'walk' back up the tree to the root record and then build the final spec by unwinding back down. Any suggestion on how to implement this using ADO/SQLServer (with as much as possible in SQL since this data may also be accessed by other front ends)?
>>
>>Bear in mind that the example above is a (gross) over-simplification of the actual table structure and that the nesting levels will often be deeper...
>>
>>TIA,
>>Viv
>
>
>SELECT *, 0 done FROM table where .... into #temp
>:loopwhile rowCount>0
>  update #temp
>  set done=1
>  , Top = coalesce(Top,T.Top)
>  , ...
>       FROM table T WHERE #temp.done=0 AND T.id = #temp.ParentID
>:loopend
>SELECT * FROM #TEMP
>
Hi Fabio,

Thanks - I couldn't get this to work from your code (maybe I misunderstood something) but it gave me a direction. I'm testing the following at the moment. Do you see any problems ?
CREATE PROCEDURE test  @id int AS
SELECT * into #temp FROM Rects WHERE id=@id 
WHILE  @@ROWCOUNT  > 0
BEGIN
  UPDATE #temp
  SET ParentID = T.Parentid
   , rtop = coalesce(#temp.rtop,T.rtop)
   ,rleft = coalesce(#temp.rleft,T.rleft)
  ,rwidth = coalesce(#temp.rwidth,T.rwidth)
  ,rheight = coalesce(#temp.rheight,T.rheight)
 , colour = coalesce(#temp.colour,T.colour,'')
        FROM Rects T  WHERE  T.id = #temp.ParentID
END
SELECT * FROM #TEMP
GO
Regards,
Viv
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform