2009-04-22 4 views
0

Les données du tableau:Afficher groupe ci-dessus Détails de la requête

ItemCode ItemName  ItemGroup 
    SFD  Softdrink  NULL 
    CCL  Coco Cola  SFD 
    FNT  Fanta   SFD 
    SPR  Sprite  SFD 
    ACL  Alchol    
    TQL  Tequila  ACL 
    VDK  Vodka   ACL 

Lorsque l'utilisateur find "Softdrink" le résultat sera:

ItemCode  ItemName 
    SFD   Softdrink  
    CCL   Coca Cola   
    FNT   Fanta      
    SPR   Sprite    

Comment pourrais-je le faire?

Merci.

Répondre

0
WITH hier (code, name) AS 
     (
     SELECT ItemCode, ItemName 
     FROM Table 
     WHERE ItemCode = 'SFD' 
     UNION ALL 
     SELECT ItemCode, ItemName 
     FROM hier 
     JOIN Table 
     ON  ItemGroup = code 
     ) 
SELECT * 
FROM hier 

Cela permet de sélectionner des éléments, même avec le niveau de hiérarchie plus profonde (i. E., Vous pouvez ajouter Fanta Lemon et Fanta Orange avec ItemGroup = FNT, et cette requête les sélectionner aussi).

0

Tous les softdrinks sont dans le groupe d'articles sfd. Essayez select itemcode, itemname from table where itemgroup = 'SFD';

des points Mark Hamilton sur:

Sauf Softdrink lui-même ne pas SFD comme ItemGroup. Vous auriez besoin d'ajouter "ou ItemCode = 'SFD'" à votre requête. Je me demande si les catégories peuvent se loger plus loin, dans ce cas, un CTE récursive ferait l'affaire

Ouais, soit ajouter un « ou » à l'où, ou aller récursive.

+0

Sauf Softdrink lui-même n'a pas SFD comme ItemGroup. Vous auriez besoin d'ajouter "ou ItemCode = 'SFD'" à votre requête. Je me demande si les catégories peuvent se nicher davantage, auquel cas un CTE récursif ferait l'affaire. –

0

Got a travaillé avec

select ItemCode, ItemName from Items 
where itemCode in (select itemcode from Items where itemname = 'softDrink') 
or itemGroup in (select itemcode from Items where itemname = 'softDrink') 

cela peut-il été modifié plus loin.

Questions connexes